C# 反序列化数组总是 returns 元素为 null

C# deserializing array always returns null for the element

反序列化部分工作时遇到问题。当我有一个带有属性的 xml 节点时,所有属性值都会正确加载到我的 class 中,但是当我使用元素时,它只是 returns null.

我将以下内容存储在 xml 文件中:

<?xml version="1.0" encoding="ISO8859-1"?>
...
<numbers>
    <number id="55">name1</number>
    <number id="4">name2</number>
</numbers>
...

Class定义如下:

public class root
{

    [XmlArray("numbers")]
    [XmlArrayItem(ElementName = "number")]
    public List<NumberObj> numbers { get; set; }
}

[Serializable]
public class NumberObj
{
    [XmlElement]
    public string name { get; set; }
    [XmlAttribute("id")]
    public string id { get; set; }    
}

一直为 null 的是名称。我尝试了多种方法,例如将列表更改为 arrary,但无论我做什么,名称都是 null。

我看到上面的 class 是错误的,因为当我将它序列化回 XML 时,我得到以下信息:

<numbers>
    <number id="123">
        <number>abc</number>
    </number>
    <number id="45">
        <number>abc</number>
    </number>
</numbers>

谁能指出我正确的方向?

谢谢

我认为正确的 class 定义必须是这样的

[XmlRoot(ElementName="number")]
public class Number {
    [XmlAttribute(AttributeName="id")]
    public string Id { get; set; }
    [XmlText]
    public string Text { get; set; }
}

[XmlRoot(ElementName="numbers")]
public class Numbers {
    [XmlElement(ElementName="number")]
    public List<Number> Number { get; set; }
}