【问题标题】:Deserialize XML with different elements to separated lists将具有不同元素的 XML 反序列化为分隔列表
【发布时间】:2017-10-06 16:14:49
【问题描述】:

你能帮我反序列化当前的xml吗:

<ObjectList>
  <Item Attr1="1"/>
  <Item Attr1="2"/>
  <DifferentItem Attr2="5"/>    
</ObjectList>

我想反序列化成这样的结构

public class ObjectList
{
    public List<Item> Items { get; set; }
    public List<DifferentItem> DifferentItems { get; set; }
}

public class Item
{
    public string Attr1 { get; set; }
}

public class DifferentItem
{
    public string Attr2 { get; set; }
}

我尝试了属性,但没有成功

[XmlArray("ObjectList")]
[XmlArrayItem("Item", typeof(Item))]

我该如何解决这个问题? 谢谢)

【问题讨论】:

    标签: c# .net xml deserialization


    【解决方案1】:

    添加属性:

    public class ObjectList
    {
        [XmlElement("Item")]
        public List<Item> Items { get; set; }
        [XmlElement("DifferentItem")]
        public List<DifferentItem> DifferentItems { get; set; }
    }
    

    【讨论】:

      【解决方案2】:

      您需要使用 XML 属性来帮助将 XML 映射到类和属性。这是我用您的 XML 编写的控制台应用程序,它可以被解析。请注意我是如何使用 XmlRoot 和 XmlElement 属性来映射它的。

      public class Program
      {
          public static void Main()
          {
              var serializer = new XmlSerializer(typeof(ObjectList));
              var xml = "<ObjectList><Item Attr1=\"1\" /><Item Attr1=\"2\" /><DifferentItem Attr2=\"5\" /></ObjectList>";
      
              using (var reader = new StringReader(xml))
              {
                  var schedule = (ObjectList)serializer.Deserialize(reader);
              }
          }
      
          [XmlRoot("ObjectList")]
          public class ObjectList
          {
              [XmlElement("Item")]
              public List<Item> Items { get; set; }
      
              [XmlElement("DifferentItem")]
              public List<DifferentItem> DifferentItems { get; set; }
          }
      
          public class Item
          {
              [XmlAttribute("Attr1")]
              public string Attr1 { get; set; }
          }
      
      
          public class DifferentItem
          {
              [XmlAttribute("Attr2")]
              public string Attr2 { get; set; }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-24
        • 1970-01-01
        • 2017-03-06
        • 2020-01-14
        • 1970-01-01
        • 2017-11-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多