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

C#如何将单行包含多个DepartmentMaster节点的XML反序列化为对象

你遇到的问题本质是待反序列化的XML存在多个并列的<DepartmentMaster>根节点,违反了标准XML的单根节点规则,因此原生的XmlSerializer默认只能识别第一个节点,无法处理多节点的情况。

方案1:添加外层根节点适配(推荐)

这种方案改动最小,符合XML序列化的标准规范:

  1. 新增根节点容器类:
[XmlRoot(ElementName = "DepartmentMasters")]
public class DepartmentMasterList
{
    [XmlElement(ElementName = "DepartmentMaster")]
    public List<DepartmentMaster> Items { get; set; } = new List<DepartmentMaster>();
}
  1. 调整反序列化逻辑,给原始XML拼接外层根标签后再反序列化:
string xml = "<DepartmentMaster><DepartmentId>267854</DepartmentId><Name>Purchase</Name><Description>Purchase Department</Description><test>1</test></DepartmentMaster><DepartmentMaster><DepartmentId>267855</DepartmentId><Name>Purchase5</Name><Description>Purchase Department5</Description><test>5</test></DepartmentMaster>";

// 拼接外层根节点
string wrappedXml = $"<DepartmentMasters>{xml}</DepartmentMasters>";

using (TextReader reader = new StringReader(wrappedXml))
{
    System.Xml.Serialization.XmlSerializer deserializer = new System.Xml.Serialization.XmlSerializer(typeof(DepartmentMasterList));
    var modelList = (DepartmentMasterList)deserializer.Deserialize(reader);
    // 所有DepartmentMaster对象都存在modelList.Items中
}

方案2:直接遍历节点反序列化(无需修改XML内容)

如果不想修改原始XML内容,可以用XmlReader逐个匹配<DepartmentMaster>节点反序列化:

string xml = "<DepartmentMaster><DepartmentId>267854</DepartmentId><Name>Purchase</Name><Description>Purchase Department</Description><test>1</test></DepartmentMaster><DepartmentMaster><DepartmentId>267855</DepartmentId><Name>Purchase5</Name><Description>Purchase Department5</Description><test>5</test></DepartmentMaster>";

var resultList = new List<DepartmentMaster>();
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(DepartmentMaster));

using (var sr = new StringReader(xml))
using (var reader = System.Xml.XmlReader.Create(sr))
{
    // 移动到第一个DepartmentMaster节点
    while (reader.ReadToFollowing("DepartmentMaster"))
    {
        var item = (DepartmentMaster)serializer.Deserialize(reader.ReadSubtree());
        resultList.Add(item);
    }
}
// 结果都存储在resultList中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:48:03