C# XML 反序列化一个包含属性和字符串列表的对象会产生一个空列表?

C# XML Deserialize an Object containing an attribute and a list of string yields an empty list?

我目前正在尝试反序列化以下消息:

<Message Id="1234">
    <Body>This</Body>
    <Body>Is</Body>
    <Body>Test</Body>
    <Body>Text</Body>
</Message>

使用以下对象:

public class Message
    {
        [XmlAttribute("Id")]
        public string Id { get; set; }

        [XmlArrayItem("Body")]
        public List<string> data { get; set; }

        public Message()
        {
            data = new List<string>();
        }
    }

对象成功反序列化,但是,Message.data.Count 为 0。我已尝试向数据添加一个 [XmlArray(ElementName="Message")] 标记,但字符串仍然为空。

提前致谢!

[XmlArrayItem("Body")]改为[XmlElement("Body")]:

public class Message
{
    [XmlAttribute("Id")]
    public string Id { get; set; }

    [XmlElement("Body")]
    public List<string> data { get; set; }

    public Message()
    {
        data = new List<string>();
    }
}

这告诉 XmlSerializer 列表将被格式化为一级元素序列,而不是二级嵌套列表。

使用 XmlArrayItem,您的 XML 需要如下所示:

<Message Id="1234">
    <data>
        <Body>This</Body>
        <Body>Is</Body>
        <Body>Test</Body>
        <Body>Text</Body>
    </data>
</Message>