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

XML反序列化报错:<xmlns=''> was not expected 求助排查

反序列化XML时<xmlns=''> was not expected错误的解决办法

你的问题主要出在反序列化代码的类型错误和实体类的XML注解错误两个方面,具体修正如下:

1. 反序列化代码的致命错误

你创建XmlSerializer时传入了typeof(string),但实际要反序列化成ReferenceResponse类型,这会导致序列化器期望的XML结构和服务器返回的完全不匹配,直接触发错误。

修正后的反序列化代码:

XmlSerializer serializer = new XmlSerializer(typeof(ReferenceResponse));
using (TextReader reader = new StringReader(response.Data))
{
    var result = (ReferenceResponse)serializer.Deserialize(reader);
}

2. 实体类的XML注解错误

原XML中,ServerVersion、XmlVersion等都是<RK7QueryResult>节点的属性(而非子元素),Reference类中的RefName、Count等也是<RK7Reference>的属性,你错误地使用了[XmlElement]注解,应该替换为[XmlAttribute];同时RK7RefList的子元素需要用[XmlArrayItem]指定名称。

修正后的实体类

[XmlRoot("RK7QueryResult")]
public class ReferenceResponse
{
    [XmlAttribute("ServerVersion")]
    public string ServerVersion { get; set; }

    [XmlAttribute("XmlVersion")]
    public int XmlVersion { get; set; }

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

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

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

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

    [XmlAttribute("DateTime")]
    public DateTime DateTime { get; set; }

    [XmlAttribute("WorkTime")]
    public int WorkTime { get; set; }

    [XmlAttribute("Processed")]
    public int Processed { get; set; }

    [XmlAttribute("ArrivalDateTime")]
    public DateTime ArrivalDateTime { get; set; }

    // 处理RK7RefList下的子节点
    [XmlArray("RK7RefList")]
    [XmlArrayItem("RK7Reference")]
    public List<Reference> RK7RefList { get; set; }
}

// 不需要XmlRoot注解,因为它不是XML根节点
public class Reference
{
    [XmlAttribute("RefName")]
    public string RefName { get; set; }
    
    [XmlAttribute("Count")]
    public int Count { get; set; }
    
    [XmlAttribute("DataVersion")]
    public int DataVersion { get; set; }
}

可选:获取RK7RefList的Count属性

如果需要读取<RK7RefList Count="154">中的Count值,需要给RK7RefList单独定义容器类,调整ReferenceResponse的对应字段:

[XmlRoot("RK7QueryResult")]
public class ReferenceResponse
{
    // 保留其他属性...

    // 替换原RK7RefList定义为以下内容
    [XmlElement("RK7RefList")]
    public RK7RefListContainer RK7RefList { get; set; }
}

[XmlType("RK7RefList")]
public class RK7RefListContainer
{
    [XmlAttribute("Count")]
    public int Count { get; set; }

    [XmlElement("RK7Reference")]
    public List<Reference> References { get; set; }
}

public class Reference
{
    // 保留原属性...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:06:35