[英]Desrialize XML with xsi:type
<?xml version="1.0" encoding="utf-16"?>
<Payload DataType="Tax" DataFormat="Standard" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<TaxReturn>
<ReturnHeader ClientID="ABC" TaxYear="2017" ReturnType="F" ReturnGroupName="Default" Country="US" OfficeName="Dev" BusinessUnitName="Returns" ConfigurationSet="Default" ReturnVersion="1" EINorSSN="" ControlNumber="202011170947577107"/>
<TaxPayerDetails NameLine1="CCC" NameLine2=""/>
<View xsi:type="Worksheet">
<Identifier Hierarchy="Federal\General\Basic Data"/>
<Controls>
<Entity ID="1"/>
</Controls>
<WorkSheetSection Name="General">
<FieldData Location="Entity Type" LocationType="Description" Value="Simple"/>
<FieldData Location="Entity Name Line 1" LocationType="Description" Value="test"/>
</WorkSheetSection>
<WorkSheetSection Name="Other Information"/>
<WorkSheetSection Name="Direct Deposit / Electronic Funds Withdrawal"/>
</View>
</TaxReturn>
</Payload>
上面是我的xml。
这是我的 c# 对象
[XmlRoot(ElementName = "TaxReturn")]
public class TaxReturn
{
[XmlElement(ElementName = "ReturnHeader")]
public ReturnHeader ReturnHeader { get; set; }
[XmlElement(ElementName = "TaxPayerDetails")]
public TaxPayerDetails TaxPayerDetails { get; set; }
[XmlElement(ElementName = "View", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public View View { get; set; }
}
[XmlRoot(ElementName = "View")]
public class View
{
[XmlAttribute(AttributeName = "type", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
public string Type { get; set; }
[XmlElement(ElementName = "Identifier")]
public Identifier Identifier { get; set; }
[XmlElement(ElementName = "Controls")]
public Controls Controls { get; set; }
[XmlElement(ElementName = "WorkSheetSection")]
public WorkSheetSection[] WorkSheetSection { get; set; }
}
当我尝试获取 View 对象时,我得到了 null - 当反序列化它时。
我认为这是关于命名空间声明,但任何帮助将不胜感激!
<View xsi:type="Worksheet">
这意味着View
的真正类型是Worksheet
类型。
创建基类View
。 从中继承Worksheet
类。
使用XmlInclude
属性指定有效类型。
[XmlRoot(ElementName = "TaxReturn")]
public class TaxReturn
{
...
[XmlElement(ElementName = "View")]
public View View { get; set; }
}
[XmlInclude(typeof(Worksheet))]
public class View { }
[XmlRoot(ElementName = "View")]
public class Worksheet : View
{
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.