【问题标题】:Deserialize different xml elements with same name into different C# classes将具有相同名称的不同xml元素反序列化为不同的C#类
【发布时间】:2019-03-31 13:44:04
【问题描述】:

我有一些 XML,其中包含两个 general 元素,每个元素都包含不同的信息。例如:

<overview>
    <general> <!-- General 01 -->
        <datetime></datetime>
        <location></location>
    </general>
    <instance>
        <general> <!-- General 02 -->
            <instanceid></instanceid>
            <instancetype></instancetype>
        </general>
    </instance>
    <instance>
        ....
    </instance>
</overview>

通过Xml2CSharp.com运行这个XML后,两个不同的general元素中的信息合并为一个类,例如:

[XmlRoot(ElementName="general")]
public class General {
    [XmlElement(ElementName="datetime")]
    public string Datetime { get; set; }
    [XmlElement(ElementName="location")]
    public string Location { get; set; }
    [XmlElement(ElementName="instanceid")]
    public string Instanceid { get; set; }
    [XmlElement(ElementName="instancetype")]
    public string Instancetype { get; set; }
}

是否可以为这些general 元素创建两个不同的类(因为它们各自包含不同的信息),并指定应该使用哪个?例如:

[XmlRoot(ElementName="overview/general")]
public class OverviewGeneral {
    [XmlElement(ElementName="datetime")]
    public string Datetime { get; set; }
    [XmlElement(ElementName="location")]
    public string Location { get; set; }
}
[XmlRoot(ElementName="instance/general")]
public class InstanceGeneral {
    [XmlElement(ElementName="instanceid")]
    public string Instanceid { get; set; }
    [XmlElement(ElementName="instancetype")]
    public string Instancetype { get; set; }
}

【问题讨论】:

    标签: c# xml deserialization


    【解决方案1】:

    您已关闭以实现您的结果,您需要为每个属性分配适当的类类型,例如

    [XmlRoot(ElementName = "instance")]
    public class Instance
    {
        [XmlElement(ElementName = "general")]
        public InstanceGeneral General { get; set; }  //<= InstanceGeneral  Use Here
    }
    
    [XmlRoot(ElementName = "overview")]
    public class Overview
    {
        [XmlElement(ElementName = "general")]
        public OverviewGeneral General { get; set; }  //<= OverviewGeneral Use Here
        [XmlElement(ElementName = "instance")]
        public Instance Instance { get; set; }
    }
    

    【讨论】:

    • 一看就明白了...谢谢你的帮助(:
    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    相关资源
    最近更新 更多