在没有包含多个列表的容器的情况下反序列化为列表

本文关键字:列表 情况下 反序列化 包含多 | 更新日期: 2023-09-27 18:27:42

我需要使用XmlSerializer反序列化这样的结构。

  <root>   
    <parameter1>
    5
    </parameter1>
    <itemList>
      <parameter2>5</parameter2>
      <item>v</item>
      <item>v2</item>
    </itemList>
    <itemList>
      <parameter2>50</parameter2>
      <item>v3</item>
      <item>v4</item>
    </itemList>
  </root>

使用此代码:

[XmlRoot("root")]
public class Root
{
    [XmlElement("parameter1")]
    public List<ItemList> Parameter1{ get; set; }
    [XmlElement("itemList")]
    public List<ItemList> ItemLists{ get; set; }
}
public class ItemList
{
    [XmlElement("parameter2")]
    public List<ItemList> Parameter2{ get; set; }
    [XmlElement("item")]
    public List<Item> Items{ get; set; }
}

但它在每个级别上只需要一个元素。如果我使用这样的对象:

[XmlRoot("root")]
public class Root
{
    [XmlElement("parameter1")]
    public List<ItemList> Parameter1{ get; set; }
    [XmlElement("itemList")]
    public List<ItemList> ItemLists{ get; set; }
}
public class ItemList
{
    [XmlElement("parameter2")]
    public List<ItemList> Parameter2{ get; set; }
    public List<Item> Items{ get; set; }
}

它反序列化所有ItemList对象,但ItemList为空。问题出在哪里?

在没有包含多个列表的容器的情况下反序列化为列表

查看此文档http://msdn.microsoft.com/en-us/library/58a18dwa(v=vs.110).aspx

我认为序列化程序无法理解这种结构:

<root>   
  <parameter1>
  5
  </parameter1>
  <itemList>
    <parameter2>5</parameter2>
    <item>v</item>
    <item>v2</item>
  </itemList>
  <itemList>
  <parameter2>50</parameter2>
    <item>v3</item>
    <item>v4</item>
  </itemList>
</root>

你应该试试这样的东西:

<root>   
  <parameter1>
  5
  </parameter1>
  <itemLists>
    <itemList>
      <parameter2>5</parameter2>
      <items>
        <item>
          <parameter3>v</parameter3>
        </item>
        <item>
          <parameter3>v2</parameter3>
        </item>
      </items>
    </itemList>
    <itemList>
      <parameter2>50</parameter2>
      <items>
        <item>
          <parameter3>v3</parameter3>
        </item>
        <item>
          <parameter3>v4</parameter3>
        </item>
      </items>
    </itemList>
  </itemLists>
</root>

这将由以下类别表示:

[XmlRoot("root")]
public class Root
{
    [XmlElement("parameter1")]
    public int Parameter1{ get; set; }
    [XmlElement("itemLists")]
    public List<ItemList> ItemLists{ get; set; }
}
public class ItemList
{
    [XmlElement("parameter2")]
    public List<ItemList> Parameter2{ get; set; }
    [XmlElement("items")]
    public List<Item> Items{ get; set; }
}
public class Item
{
    [XmlElement("parameter3")]
    public string Parameter3{ get; set; }
}
相关文章: