XmlSerializer未序列化列表

问题描述

我很不幸要序列化对象列表。

这是我要序列化的XML。

<Root version="1">
    <Elements>
        <Element>
            <Id>c5b9f5d9-0671-4769-8a3a-8e7ce06b889d</Id>
            <GroupId>c5b9f5d9-0671-4769-8a3a-8e7ce06b889d</GroupId>
            <Dwell>10</Dwell>
        </Element>
        <Element>
            <Id>67d3ffba-b405-4d1e-8dbb-ea21d0ba4e7b</Id>
            <GroupId>67d3ffba-b405-4d1e-8dbb-ea21d0ba4e7b</GroupId>
            <Dwell>10</Dwell>
        </Element>
        <Element>
            <Id>3b5d421d-3b93-461d-af77-d1b1e922a092</Id>
            <GroupId>3b5d421d-3b93-461d-af77-d1b1e922a092</GroupId>
            <Dwell>10</Dwell>
        </Element>
        <Element>
            <Id>a24e3fce-846c-45ec-8a08-79add8f9024e</Id>
            <GroupId>a24e3fce-846c-45ec-8a08-79add8f9024e</GroupId>
            <Dwell>10</Dwell>
        </Element>
    </Elements>
</Root>

这是它要消毒的类。

[XmlRoot("Root")]
    public class TourRoot:BaseXmlWriter
    {
        [XmlAttribute("version")]
        public int Version { get; set; }

        [XmlElement("Elements")]
        public List<TourRootElement> Elements { get; set; }
    }

    [XmlRoot("Element")]
    public class TourRootElement
    {
        [XmlElement("Id")]
        public string Id { get; set; }

        [XmlElement("GroupId")]
        public string GroupId { get; set; }

        [XmlElement("Dwell")]
        public int Dwell { get; set; }
    }

这是试图对其进行消毒的代码

var serializer = new XmlSerializer(typeof(TourRoot));
var reader = new StringReader(entity.XmlData);
var tour = serializer.Deserialize(reader) as TourRoot;

发生了什么: 消毒器将创建对象,在version属性添加正确的值,创建列表,并仅向列表中添加1个元素,其中包含所有认值,而不是正确值。甚至更奇怪的是,当我使用这些元素之一并尝试对其进行反序列化时,该元素对于该对象而言是正确的。

我的问题: 为什么列表无法正确填充?

解决方法

我能够弄清楚这一点。

我需要在列表中添加几个属性。

    [XmlArray("Elements"),XmlArrayItem(typeof(TourRootElement),ElementName = "Element")]
    public List<TourRootElement> Elements { get; set; }