使用自定义 elementName 将 xml 反序列化为 List<T>

Deserialize xml to List<T> with custom elementName

今天我试图将一些 xml 反序列化为 List<Status>,因为 XML 元素名称完全不同。例如,XML 如下:

<root>
    <child id="1">Lorum</child>
    <child id="2">Ipsum</child>
    <child id="3">Dolor</child>
</root>

要将其转换为 List<T>,可以创建与元素同名的对象。但就我而言,这是不需要的。

在我从 dotnetfiddle.net 复制的代码下方:

using System;
using System.Xml;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.IO;

[XmlRoot("root")]
public class Statuses : List<Status>
{

}

[XmlRoot("child")]
public class Status
{
    [XmlAttribute("id")]
    public int ID;

    [XmlText]
    public string Value;
}

public static class Program
{
    private static string xml = "<root><child id=\"1\">Lorum</child><child id=\"2\">Ipsum</child><child id=\"3\">Dolor</child></root>";

    public static void Main()
    {
        using (StringReader sw = new StringReader(xml))
        {
            XmlSerializer serializer = new XmlSerializer(typeof(Statuses));
            Statuses statuses = (Statuses)serializer.Deserialize(sw);

            Console.WriteLine(statuses.Count);
        }
    }
}

现在的问题是如何轻松填写列表。

child 元素的属性更改为 XMLType

[XmlType("child")]
public class Status

Xml只有一个词根,但有多种类型。