在没有包含多个列表的容器的情况下反序列化为列表
本文关键字:列表 情况下 反序列化 包含多 | 更新日期: 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; }
}