C# 如何序列化重复元素的XML节点

C# 如何序列化重复元素的XML节点,c#,xml-serialization,C#,Xml Serialization,我正在尝试将一些XML反序列化为一个项目数组 以下是XML: <?xml version=\"1.0\" encoding=\"utf-8\"?> <items> <item> <name>John</name> </item> <item> <name>Jane</name> </item> </item

我正在尝试将一些XML反序列化为一个项目数组

以下是XML:

<?xml version=\"1.0\" encoding=\"utf-8\"?>
<items>
    <item>
        <name>John</name>
    </item>
    <item>
         <name>Jane</name>
    </item>
</items>
然后我反序列化:

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;
}
        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;
        }
itemCount为0(应为2)

这里有一个类似的解决方案:但它似乎只在XML节点名与类名相同时才起作用(我的类名大小写不同)

我需要修改什么以确保所有项都反序列化?

缺少Xml根“items”

你的班级应该是:

    [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(Item[]), new XmlRootAttribute("items"));
using (TextReader textReader = new StringReader(xmlString))
{
    var items = (Item[])xmlSerializer.Deserialize(textReader);
    var itemCount = items.Length;
}
        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;
        }
根节点是
,因此
类不应具有
XmlRoot
属性,而应使用
XmlType
属性:

[XmlType("item")]
public class Item
{
    [XmlElement("name")]
    public string Name { get; set; }
}

我之前已经设法让你的解决方案生效。不幸的是,我需要返回的对象是一个数组/列表/集合等。我希望能够只包含项。Length我不确定是否理解,在我的答复中,您将拥有一个“Name”的列表/数组:foreach(items.item中的var item){Response.Write(item.Name);}将返回==>John,Jane让我尝试澄清一下。我希望能够编写以下语句:foreach(items中的var item)。与此解决方案类似: