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

VB.NET中XML数组反序列化遇到问题求助

嘿,我完全懂你现在的困扰!之前我在VB.NET里做XML反序列化时,也在数组属性这儿卡了好久——明明单个类都能正常解析,一碰到数组就要么是空的,要么直接报错。

先给你说最常见的问题:你的listing()数组属性大概率缺了XML序列化特性的标注,导致.NET不知道怎么把XML里的节点映射到数组上。给你整理了修正后的类结构,你可以参考着调整:

Imports System.Xml.Serialization

' 先给根类加上XmlRoot特性,确保和XML根节点名匹配
<XmlRoot("rootobject")>
Public Class rootobject
    Public Property response As response
End Class

Public Class response
    Public Property area_name As String
    Public Property bounding_box As bounding_Box
    Public Property country As String
    Public Property county As String
    Public Property latitude As String
    
    ' 重点在这儿!根据你的XML结构二选一:
    ' 情况1:XML里是 <listing><item>...</item><item>...</item></listing> 这种嵌套结构
    <XmlArray("listing"), XmlArrayItem("item")> ' 括号里的名字要和你XML里的实际节点名完全一致!
    Public Property listing() As listing
    
    ' 情况2:XML里是直接重复的 <listing>...</listing><listing>...</listing> 节点
    ' <XmlElement("listing")>
    ' Public Property listing() As listing
    
    ' 你的其他属性继续放在这里...
End Class

' 别忘了给嵌套类也补全属性
Public Class listing
    ' 示例属性,替换成你实际的字段
    Public Property listing_id As String
    Public Property description As String
    ' 其他属性...
End Class

Public Class bounding_Box
    Public Property min_latitude As String
    Public Property max_latitude As String
    Public Property min_longitude As String
    Public Property max_longitude As String
    ' 其他属性...
End Class

然后给你一个通用的反序列化方法,你可以直接用:

Public Function DeserializeFromXml(xmlText As String) As rootobject
    Try
        Dim serializer As New XmlSerializer(GetType(rootobject))
        Using stringReader As New IO.StringReader(xmlText)
            Return DirectCast(serializer.Deserialize(stringReader), rootobject)
        End Using
    Catch ex As Exception
        ' 这里可以加错误处理,比如打印异常信息排查问题
        Console.WriteLine($"反序列化出错:{ex.Message}")
        Return Nothing
    End Try
End Function

最后给你提几个容易踩的坑:

  • 节点名称大小写敏感!XML里是<Listing>,你特性里写"listing"肯定匹配不上
  • 如果你的数组在XML里没有外层包裹节点(直接是重复的子节点),一定要用<XmlElement>代替<XmlArray>
  • 所有嵌套类的属性要和XML里的字段一一对应,缺了的话反序列化后对应属性会是默认值(比如空字符串、0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:24:53