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

C# XML反序列化遇InvalidOperationException异常求助

问题原因分析
  • XML中的<bns:result>节点属于http://api.platform.boomi.com/命名空间,但Plan类未配置对应命名空间规则,导致XmlSerializer无法匹配类型
  • Plan类的planName属性与XML中的name属性名称不匹配,无法自动映射赋值
  • 默认情况下XmlSerializer期望根节点名称为Plan,但实际待反序列化的节点是result
解决方案

1. 修改Plan类的XML序列化特性

通过特性指定节点名称、命名空间以及属性映射关系:

using System.Xml.Serialization;

[XmlRoot(ElementName = "result", Namespace = "http://api.platform.boomi.com/")]
public class Plan
{
    [XmlAttribute("planId")]
    public int planId { get; set; }

    [XmlAttribute("name")]
    public string planName { get; set; }
}

2. 修正后的完整反序列化代码

原代码结构无需大幅调整,添加特性后即可正常反序列化:

XmlDocument doc = new XmlDocument();
doc.LoadXml(response.Result);
List<Plan> plans = new List<Plan>();

if (doc != null)
{
    var nsmgr = new XmlNamespaceManager(doc.NameTable);
    nsmgr.AddNamespace("bns", "http://api.platform.boomi.com/");
    var nodes = doc.SelectNodes(@"//bns:result", nsmgr);

    XmlSerializer xmlSerializer = new XmlSerializer(typeof(Plan));

    foreach(XmlNode node in nodes)
    {
        using (XmlNodeReader xmlReader = new XmlNodeReader(node))
        {
            Plan plan = (Plan)xmlSerializer.Deserialize(xmlReader);
            plans.Add(plan);
        }
    }
}

关键说明

  • [XmlRoot]特性指定了XML节点名称为result,并匹配了bns对应的命名空间,解决了节点不匹配的异常
  • [XmlAttribute("name")]将类中的planName属性与XML的name属性绑定,确保属性值能正确映射读取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:37:03