VB.NET反序列化XML遇错误:<response xmlns=''>非预期
解决XML反序列化报错:
Deserializing XML <response xmlns=''> was not expected 这个问题的核心在于你通过「JSON转类」生成的VB.NET结构,和原始XML的节点映射不匹配——XML的根节点是<response>,但你生成的根类是Rootobject,而且默认生成的类没有携带XML序列化所需的属性标记,导致反序列化器找不到对应关系。下面是具体的解决步骤:
方法1:修正现有类的XML序列化属性
给你的类添加XmlSerializer所需的属性,让类结构和XML节点完全对应:
Imports System.Xml.Serialization ' 标记Rootobject类对应XML的根节点<response>,明确指定无命名空间 <XmlRoot("response", Namespace:="")> Public Class Rootobject ' 标记response属性对应XML中的子节点(如果你的XML结构里response是根节点下的子节点,否则可以调整) <XmlElement("response")> Public Property response As Response End Class Public Class Response ' 标记parsererror属性对应XML中的<parsererror>节点 <XmlElement("parsererror")> Public Property parsererror As ParserError ' 根据实际XML结构补充parsererror的子属性 End Class ' 示例:如果parsererror有子节点,补充对应的类 Public Class ParserError <XmlElement("message")> Public Property Message As String ' 其他子节点对应的属性... End Class
然后用修正后的类执行反序列化:
Dim xmlContent As String = "你的XML字符串" Dim serializer As New XmlSerializer(GetType(Rootobject)) Using reader As New StringReader(xmlContent) Dim result = CType(serializer.Deserialize(reader), Rootobject) End Using
方法2:更稳妥的方式——直接从XML生成类
其实你完全不需要绕JSON这一步,Visual Studio支持直接从XML生成适配的VB类,能避免结构偏差:
- 复制你的原始XML内容到剪贴板
- 在Visual Studio的VB.NET文件中右键 → 「选择性粘贴」→ 「将XML粘贴为类」
生成的类会自动带上XmlRoot、XmlElement等属性,完美匹配XML结构,直接就能用来反序列化,不会出现节点不匹配的问题。
关键原因复盘
你遇到的报错本质是:
- XML的根节点是
<response>,但你生成的根类是Rootobject,反序列化器默认会寻找和类名一致的根节点 - XML中的
xmlns=''表示无命名空间,若类没有明确指定命名空间,反序列化器会默认使用默认命名空间,导致匹配失败
内容的提问来源于stack exchange,提问作者FraserOfSmeg
相关产品推荐
相关产品推荐

