C# 反序列化XML中的嵌套集合

C# 反序列化XML中的嵌套集合,c#,xml,serialization,xml-deserialization,C#,Xml,Serialization,Xml Deserialization,我从一个web服务中获取了一些XML,但它没有按我希望的方式进行反序列化。我希望有一个行元素的集合,其中每个行元素都有一个值元素的集合。但是,反序列化对象仅捕获XML中的最后一行元素。以下是课程: [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false

我从一个web服务中获取了一些XML,但它没有按我希望的方式进行反序列化。我希望有一个行元素的集合,其中每个行元素都有一个值元素的集合。但是,反序列化对象仅捕获XML中的最后一行元素。以下是课程:

    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public partial class SimpleCodeList
    {
        [XmlArray("rowField")]
        private SimpleCodeListValue[] rowField;

        [System.Xml.Serialization.XmlArrayItemAttribute("Value", IsNullable = false)]
        public SimpleCodeListValue[] Row
        {
            get
            {
                return this.rowField;
            }
            set
            {
                this.rowField = value;
            }
        }
    }

    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class SimpleCodeListValue
    {

        private string simpleValueField;

        private string columnRefField;

        public string SimpleValue
        {
            get
            {
                return this.simpleValueField;
            }
            set
            {
                this.simpleValueField = value;
            }
        }

        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string ColumnRef
        {
            get
            {
                return this.columnRefField;
            }
            set
            {
                this.columnRefField = value;
            }
        }
    }
下面是XML:

<CodeList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="...">
    <ColumnSet xmlns="">
        <Column Id="code" Use="required">
            <ShortName>Code</ShortName>
            <Data Type="normalizedString" Lang="en" />
        </Column>
        <Column Id="name" Use="optional">
            <ShortName>Name</ShortName>
            <Data Type="normalizedString" Lang="en" />
        </Column>
    </ColumnSet>
    <SimpleCodeList xmlns="">
        <Row>
            <Value ColumnRef="code">
                <SimpleValue>1234</SimpleValue>
            </Value>
            <Value ColumnRef="name">
                <SimpleValue>Service 123</SimpleValue>
            </Value>            
        </Row>
        <Row>
            <Value ColumnRef="code">
                <SimpleValue>5678</SimpleValue>
            </Value>
            <Value ColumnRef="name">
                <SimpleValue>Service 456</SimpleValue>
            </Value>            
        </Row>
     ...
然后通过此函数运行它:

public static T Deserialize<T>(XmlDocument doc)
{
    var serializer = new XmlSerializer(typeof(T));
    XmlNodeReader reader = new XmlNodeReader(doc);
    using (reader)
    {
        return (T)serializer.Deserialize(reader);
    }            
}
...
CodeList codelist = Utility.Deserialize<CodeList>(xml);
publicstatict反序列化(xmldocumentdoc)
{
var serializer=newxmlserializer(typeof(T));
XmlNodeReader阅读器=新的XmlNodeReader(文档);
使用(读卡器)
{
返回(T)序列化程序。反序列化(读取器);
}            
}
...
CodeList CodeList=实用程序.反序列化(xml);

通过检查XmlDocument,我可以看出有100多个元素,但“codelist”对象只包含其中的一个元素。

您研究过吗?您可以将代码粘贴到那里,以获得所需的所有类。我使用了visual studio中的“粘贴”特殊功能来生成这些类。您如何反序列化xml以及在哪里看到它?这只是最后一个元素。我更新了问题。当我将xml粘贴到notepad++中时,我可以看到存储在“codelist”对象中的行是粘贴的xml中的最后一行。请将您的问题分享给我好吗?您缺少
代码列表
类型的定义。我在这里用您的代码制作了一个示例小提琴,但它有一个编译错误
编译错误(第96行,第35列):找不到类型或命名空间名称“CodeList”(您是否缺少using指令或程序集引用?
public static T Deserialize<T>(XmlDocument doc)
{
    var serializer = new XmlSerializer(typeof(T));
    XmlNodeReader reader = new XmlNodeReader(doc);
    using (reader)
    {
        return (T)serializer.Deserialize(reader);
    }            
}
...
CodeList codelist = Utility.Deserialize<CodeList>(xml);