List<string> -> xml 反序列化

List<string> -> xml deserialization

我有以下 xml 文件:

<ItemList>
    <Item id="item-aa-00" status="TYPE1">
        <Elements>
            <element>element121</element>       
        </Elements>     
    </Item>
    <Item id="item-aa-01" status="TYPE2">
        <Elements>
            <element>element122</element>
            <element>element123</element>
            <element>element124</element>
        </Elements>     
    </Item> 
</ItemList>

我正在尝试使用以下模型对其进行反序列化:

[DataContract]
public enum ItemStatusEnum
{
    [EnumMember(Value = "TYPE1")]
    TYPE1 = 10,
    [EnumMember(Value = "TYPE2")]
    TYPE2 = 20
}

[XmlRoot("Item")]
[DataContract(Name = "Item")]
public class ItemDto
{

    [DataMember(Name = "id")]
    [XmlAttribute(AttributeName = "id")]
    public string Id { get; set; }

    [DataMember(Name = "candidateElements")]
    [XmlIgnore]
    public IEnumerable<string> Elements { get; set; }

    [XmlArray("Elements")]
    [XmlArrayItem("element"), Browsable(false), EditorBrowsable(EditorBrowsableState.Never)]
    public List<string> CandidateElementsSurrogate { get { return Elements .ToList(); } set { Elements = value; } }

    [DataMember(Name = "status")]
    [XmlAttribute(AttributeName = "status")]
    public ItemStatusEnum Status { get; set; }

    public ItemDto()
    {
        this.Elements = new List<string>();
    }

}

[XmlRoot("ItemList")]
[DataContract(Name = "ItemListDto", Namespace = "")]
public class ItemListDto
{

    [XmlElement("Item")]
    [DataMember(Name = "myElements")]
    public List<ItemDto> myElements { get; set; }

}

此模型设法反序列化我的 xml 文件,但 Elements 集合仍然为空。我缺少什么?

我已经更改了这两个属性并且可以反序列化您的 xml:

[XmlIgnore]
public List<string> Elements { get; set; }

[XmlArray("Elements")]
[XmlArrayItem("element")]
public List<string> CandidateElementsSurrogate { get { return Elements; } set { Elements = value; } }

我已经删除了 DataMember 属性,它们不被反序列化使用。