如何序列化重复元素的 XML 节点
How to serialize a XML node of repeated elements
我正在尝试将一些 XML 反序列化为项目数组。
这是 XML:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<items>
<item>
<name>John</name>
</item>
<item>
<name>Jane</name>
</item>
</items>
还有我的 class:
[XmlRoot("item")]
public class Item
{
[XmlElement("name")]
public string Name { get; set; }
}
然后反序列化:
var xmlSerializer = new XmlSerializer(typeof(Item[]), new XmlRootAttribute("items"));
using (TextReader textReader = new StringReader(xmlString))
{
var items = (Item[])xmlSerializer.Deserialize(textReader);
var itemCount = items.Length;
}
itemCount 为 0(应为 2)。
这里有一个类似的解决方案: 但它似乎只有在 XML 节点名称与 class 名称相同时才有效(我的名称在大小写上不同)。
我需要修改什么以确保反序列化所有项目?
缺少 Xml 根 "items"
您的 class 应该是:
[XmlRoot("items")]
public class Items
{
[XmlElement("item")]
public Item[] Item { get; set; }
}
[XmlRoot("item")]
public class Item
{
[XmlElement("name")]
public string Name { get; set; }
}
反序列化代码:
var xmlSerializer = new XmlSerializer(typeof(Items), new XmlRootAttribute("items"));
using (TextReader textReader = new StringReader(xmlString))
{
var items = (Items)xmlSerializer.Deserialize(textReader);
var itemCount = items.Item.Length;
}
根节点是<items>
,所以Item
class不应该有XmlRoot
属性,而应该使用XmlType
属性:
[XmlType("item")]
public class Item
{
[XmlElement("name")]
public string Name { get; set; }
}
我正在尝试将一些 XML 反序列化为项目数组。
这是 XML:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<items>
<item>
<name>John</name>
</item>
<item>
<name>Jane</name>
</item>
</items>
还有我的 class:
[XmlRoot("item")]
public class Item
{
[XmlElement("name")]
public string Name { get; set; }
}
然后反序列化:
var xmlSerializer = new XmlSerializer(typeof(Item[]), new XmlRootAttribute("items"));
using (TextReader textReader = new StringReader(xmlString))
{
var items = (Item[])xmlSerializer.Deserialize(textReader);
var itemCount = items.Length;
}
itemCount 为 0(应为 2)。
这里有一个类似的解决方案: 但它似乎只有在 XML 节点名称与 class 名称相同时才有效(我的名称在大小写上不同)。
我需要修改什么以确保反序列化所有项目?
缺少 Xml 根 "items"
您的 class 应该是:
[XmlRoot("items")]
public class Items
{
[XmlElement("item")]
public Item[] Item { get; set; }
}
[XmlRoot("item")]
public class Item
{
[XmlElement("name")]
public string Name { get; set; }
}
反序列化代码:
var xmlSerializer = new XmlSerializer(typeof(Items), new XmlRootAttribute("items"));
using (TextReader textReader = new StringReader(xmlString))
{
var items = (Items)xmlSerializer.Deserialize(textReader);
var itemCount = items.Item.Length;
}
根节点是<items>
,所以Item
class不应该有XmlRoot
属性,而应该使用XmlType
属性:
[XmlType("item")]
public class Item
{
[XmlElement("name")]
public string Name { get; set; }
}