C#中XML List<T>反序列化存在问题

3

我正在尝试反序列化一个XML,但是我使用的List对象出现了很多问题。

以下是XML内容:

<EntriesSerialize>
    <Entries>
        <Entry file="myFile"
        value="2000" />
        <Entry file="myFile"
        value="400" />
        <Entry file="myFile"
        value="200" />
    </Entries>
</EntriesSerialize>

我的课程包括:

[XmlType("Entry")]
public class Entry
{
    public Entry()
    {

    }

    [XmlAttribute("file")]
    public string File { get; set; }

    [XmlAttribute("value")]
    public string Value { get; set; }

 }

[XmlType("EntriesSerialize")]
public class EntriesSerialize
{
    public EntriesSerialize()
    {
        EntriesList = new List<Entry>();
    }

    [XmlElement("Entries")]
    public List<Entry> EntriesList { get; set; }

}

我正在使用的代码来反序列化此 XML 是:
``` 我正在使用的代码来反序列化此 XML 是: ```
public static T Deserialize<T>(string content)
{
    byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(content);
    MemoryStream stream = new MemoryStream(byteArray);
    StreamReader reader = new StreamReader(stream);

    XmlSerializer serializer;
    serializer = new XmlSerializer(typeof(T));

    T model = (T)serializer.Deserialize(reader);
    reader.Close();

    return model;
}

我调用反序列化的方法是Deserialize(string content),就像这样:
EntriesSerialize temp = Deserialize<EntriesSerialize>(data);

然而,在使用C#调试器查看temp变量时,我发现EntriesList对象中只有一个元素,并且该元素的file和value属性为空。
注意:这些类的序列化工作正常。
1个回答

5
EntriesList应该具有以下属性:
[XmlArray("Entries"), XmlArrayItem("Entry")]
public List<Entry> EntriesList { get; set; }

您当前使用的语法是 [XmlElement("Entries")],它被配置为:

<EntriesSerialize>
    <Entries file="myFile" value="2000" />
    <Entries file="myFile" value="400" />
    <Entries file="myFile" value="200" />
</EntriesSerialize>

(供参考:这里的[XmlType("...")]属性在此场景中没有被使用,但也不会产生任何负面影响。)

(提供信息而已,这个场景下[XmlType("...")]属性都没有被使用,但不会有任何负面影响)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接