使用自定义 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只有一个词根,但有多种类型。
今天我试图将一些 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只有一个词根,但有多种类型。