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

C# XmlSerializer反序列化同名节点XML时数组为空问题求解

问题根因

反序列化得到空Rows数组的原因是XML序列化特性配置和实际XML结构不匹配:

  • [XmlArrayItem]特性必须搭配[XmlArray]使用,对应结构是数组外存在一层同名包裹父元素,例如<Rows><row></row><row></row></Rows>才匹配你当前的特性配置。
  • 你提供的XML中,<table>下直接平铺<row>节点,<row>下直接平铺<column>节点,没有额外的数组包裹元素,序列化器无法识别到对应节点,最终得到空数组。
修正方案

仅需调整两个类的序列化特性,无需修改反序列化执行逻辑:

[Serializable, XmlRoot("table")]
public class XmlDoc
{
    [XmlElement("row")]
    public XmlDocRow[] Rows { get; set; } = Array.Empty<XmlDocRow>();
}

public class XmlDocRow
{
    [XmlElement("column")]
    public string?[] Columns { get; set; } = Array.Empty<string?>();
}
效果验证

使用你提供的示例XML反序列化后:

  • Rows数组长度为3,和XML中3个<row>节点一一对应
  • 每个XmlDocRow实例的Columns数组长度为3
  • 前两行列值分别为"abc"/"def"/"ghi"、"jkl"/"mno"/"pqr",第三行的空<column>节点默认解析为空字符串"",满足可空字符串的处理要求。

可选配置:如果需要将空内容的<column>节点解析为null而非空字符串,只需将Columns属性的特性修改为[XmlElement("column", IsNullable = true)]即可。

内容的提问来源于stack exchange,提问作者baouss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:09:36