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

VB.NET反序列化XML时Metadata节点解析问题求助

解决XML反序列化Metadata为空的问题

我一眼就看出问题所在了——你的XML特性标记和实际的XML结构不匹配,这才导致反序列化后Metadata始终为空。

先理清楚你的XML结构:每个<SubMenuItem>里的<Metadata>是一个容器节点,里面包含多个<MetadataItem>子节点。但你当前给Metadata属性标记的是<XmlElement("Metadata")>,这会让序列化器期望直接生成多个<Metadata>节点,而不是包裹在<Metadata>容器里的<MetadataItem>,自然找不到匹配的数据。

正确的特性标记方式

你需要把Metadata属性的特性改成<XmlArray>和<XmlArrayItem>的组合:

  • <XmlArray("Metadata")>:指定外层的容器节点名称
  • <XmlArrayItem("MetadataItem")>:指定容器内每个子元素的名称

修改后的PECSubMenuItem类代码

<XmlType("MenuItem")> Public Class PECSubMenuItem
    ' 其他原有代码保持不变...
    Private mMetadataList As List(Of MetadataItem)

    Public Sub New()
        mGUID = System.Guid.NewGuid.ToString
        mMetadataList = New List(Of MetadataItem)
    End Sub

    ' 替换原来的XmlElement特性为以下组合
    <XmlArray("Metadata"), XmlArrayItem("MetadataItem")> 
    Public Property Metadata As List(Of MetadataItem)
        Get
            Return mMetadataList
        End Get
        Set(ByVal value As List(Of MetadataItem))
            mMetadataList = value
        End Set
    End Property

    ' 其他原有属性和枚举保持不变...
End Class

为什么这样有效?

  • <XmlArray("Metadata")>告诉序列化器:这个List对应的外层节点是<Metadata>
  • <XmlArrayItem("MetadataItem")>告诉序列化器:List里的每个元素要序列化为<MetadataItem>节点,放在<Metadata>容器内部
    这完全匹配你提供的XML结构,反序列化时就能正确识别并填充Metadata列表了。

另外你的MetadataItem类特性是正确的,<XmlElement("description")>和<XmlElement("value")>刚好对应XML里的子节点,不需要修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:08:21