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

XmlSerializer遇XML命名空间属性时反序列化崩溃求助

问题描述

从服务获取的XML在反序列化时,XmlSerializer遇到首个属性就崩溃,简化后的XML根节点如下:

<ns2:basicInformation xmlns:ns2="http://fu.bar.com/">

通过XML转C#工具生成的对应类,其XmlRoot特性未处理命名空间,手动移除XML中的命名空间后反序列化可正常执行,但不想用字符串替换这种粗暴方法,求正确处理方案。

解决方案

调研后认可Marc Gravell的方案,但实际采用Denis Micheal的方案即可解决问题,无需给所有模型节点添加命名空间:

  1. 自定义XML读取器,忽略命名空间:
public class NoNamespaceXmlReader : XmlTextReader
{
    public NoNamespaceXmlReader(TextReader reader) : base(reader) { }

    public override string NamespaceURI
    {
        get { return string.Empty; }
    }
}
  1. 反序列化时使用该读取器:
using (var stringReader = new StringReader(xmlContent))
using (var xmlReader = new NoNamespaceXmlReader(stringReader))
{
    var serializer = new XmlSerializer(typeof(BasicInformation));
    var result = (BasicInformation)serializer.Deserialize(xmlReader);
}

这种方式无需修改原始XML字符串,也不用给所有模型类添加命名空间特性,就能完成正常反序列化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:24:54