如何将XML中重复的同级元素序列化为C#类的数组属性?
解决方案
直接替换数组属性的标注特性即可,无需额外自定义序列化逻辑,这是.NET 原生XML序列化支持的标准场景:
- 移除原来的
[XmlArray]、[XmlArrayItem]组合特性 - 给数组属性添加
[XmlElement]特性,指定对应XML元素名即可
完整类定义示例
// 子元素对应的实体类 public class Dog { public string Name { get; set; } public int Age { get; set; } } // 根节点对应的实体类 [XmlRoot("Animals")] public class Animals { // 标注数组的每个项对应父节点下名为Dog的直接子元素 [XmlElement("Dog")] public Dog[] Dogs { get; set; } }
调用示例(反序列化)
var serializer = new XmlSerializer(typeof(Animals)); using var streamReader = new StreamReader("待解析的XML文件路径"); var animalsData = (Animals)serializer.Deserialize(streamReader); // animalsData.Dogs 即为解析完成的Dog数组
原理说明
[XmlArray]特性是用来声明数组存在外层包裹节点的场景(对应你之前示例里的<Dogs>节点),当所有重复元素直接作为父节点的同级子元素存在时,用[XmlElement]修饰集合/数组类型,序列化器会自动将所有匹配名称的同级子元素收集为数组,序列化时也会直接把数组项输出为同级子节点,刚好匹配你需要处理的XML结构。
内容的提问来源于stack exchange,提问作者GarlicAfterTaste
相关产品推荐
相关产品推荐

