You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将XML中重复的同级元素序列化为C#类的数组属性?

解决方案

直接替换数组属性的标注特性即可,无需额外自定义序列化逻辑,这是.NET 原生XML序列化支持的标准场景:

  1. 移除原来的[XmlArray]、[XmlArrayItem]组合特性
  2. 给数组属性添加[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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:15:01