如何将重复的 XML 元素序列化为数组?
Posted
技术标签:
【中文标题】如何将重复的 XML 元素序列化为数组?【英文标题】:How to serialize duplicate XML elements into an array? 【发布时间】:2021-11-13 16:31:49 【问题描述】:我正在尝试序列化一些格式不正确的 XML。我特别在将重复元素转换为数组时遇到问题。
在通常情况下,这样的事情可以序列化就好了
类
public class Animal
[XmlArray("Dogs")]
[XmlArrayItem("Dog", typeof(Dog))]
public Dog[] Dogs get;set;
XML
<Animals>
<Dogs>
<Dog>
<Name>Spot</Name>
<Age>5</Age>
</Dog>
<Dog>
<Name>Spike</Name>
<Age>2</Age>
</Dog>
<Dog>
<Name>Arnold</Name>
<Age>7</Age>
</Dog>
</Dogs>
</Animals>
实际上,XML 的结构如下
<Animals>
<Dog>
<Name>Spot</Name>
<Age>5</Age>
</Dog>
<Dog>
<Name>Spike</Name>
<Age>2</Age>
</Dog>
<Dog>
<Name>Arnold</Name>
<Age>7</Age>
</Dog>
</Animals>
我可以将这些属性序列化为数组的最简单方法是什么?
【问题讨论】:
【参考方案1】:它应该按照https://docs.microsoft.com/en-us/dotnet/standard/serialization/controlling-xml-serialization-using-attributes#serializing-an-array-as-a-sequence-of-elements 中的描述工作,即
[XmlElement(ElementName = "Dog")]
public Dog[] Dogs get;set;
【讨论】:
【参考方案2】:该问题不包含序列化方法的代码。无论如何,上面描述的 XML 标记在使用以下序列化方法时应该可以工作:
public class Animals
[XmlArray("Dogs")]
[XmlArrayItem("Dog", typeof(Dog))]
public Dog[] Dogs get; set;
public static string SerializeToXml(object o)
var ns = new XmlSerializerNamespaces(new[] Ident=true, XmlQualifiedName.Empty );
using (var stream = new StringWriter())
using (var writer = XmlWriter.Create(stream, new XmlWriterSettings OmitXmlDeclaration = true ))
var serializer = new XmlSerializer(typeof(Animals));
serializer.Serialize(writer, o, ns);
return stream.ToString();
测试代码
var animals = new Animals()
Dogs = new Dog[] new Dog Name = "dog1", Age = 6 , new Dog Name = "dog2", Age = 7
;
var xml = SerializeToXml(animals);
将生成以下 XML:
<Animals>
<Dogs>
<Dog>
<Name>dog1</Name>
<Age>6</Age>
</Dog>
<Dog>
<Name>dog2</Name>
<Age>7</Age>
</Dog>
</Dogs>
</Animals>
有关更多信息,请参阅Serializing an Array of Objects。
【讨论】:
以上是关于如何将重复的 XML 元素序列化为数组?的主要内容,如果未能解决你的问题,请参考以下文章