繁体   English   中英

使用 xsi:type 反序列化 XML

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM