【问题标题】:vb.net xml de-serialization returns empty listvb.net xml反序列化返回空列表
【发布时间】:2017-04-24 20:21:45
【问题描述】:

我正在尝试反序列化一个看起来像这样的简单 xml

<categories>
    <category name="camera">
        <tags>
            <tag name="6" value="stdy_cam"/>
            <tag name="7" value="shaky"/>
        </tags>
    </category>
    <category name="classify">
        <tags></tags>
    </category>
</categories>

这是我的加载方法 -

Private Sub loadAllCategories()
    Dim serializer As XmlSerializer
    Using stream As New System.IO.FileStream("C:\temp\tags2.xml", IO.FileMode.Open)
        serializer = New XmlSerializer(GetType(List(Of Category)), New XmlRootAttribute("categories"))
        Me.Categories = DirectCast(serializer.Deserialize(stream), List(Of Category))
    End Using
End Sub

这些是我的课 -

<Serializable()>
Public Class Category
    <XmlAttribute("name")>
    Public Property Name As String
    <XmlArrayItem("tag")>
    Public Property Tags As New List(Of Tag)
End Class

<Serializable()>
Public Class Tag
    <XmlAttribute("name")>
    Public Property Name As String
    <XmlAttribute("value")>
    Public Property Value As String
End Class

一切似乎都很好,但是当我运行程序时,类别列表总是空的。该程序不会抛出任何错误或异常。当我调试时,它只显示 0 作为类别的计数。我可能做错了什么?

【问题讨论】:

    标签: .net xml vb.net serialization xml-parsing


    【解决方案1】:

    您在列表中的得分为零,因为您的类名为 Category,而您的元素是 category,小写 c。试试这个:

    <XmlType(TypeName:="category")>
    Public Class Category
        <XmlAttribute("name")>
        Public Property Name As String
        <XmlArrayItem("tag")>
        Public Property Tags As New List(Of Tag)
    End Class
    

    您也可以删除可序列化属性。

    编辑也修正了标签:

    <XmlType(TypeName:="category")>
    Public Class Category
        <XmlAttribute("name")>
        Public Property Name As String
        <XmlArray("tags")>
        Public Property Tags As New List(Of Tag)
    End Class
    
    <XmlType(TypeName:="tag")>
    Public Class Tag
        <XmlAttribute("name")>
        Public Property Name As String
        <XmlAttribute("value")>
        Public Property Value As String
    End Class
    

    【讨论】:

    • 那种工作,但不完全 - 我可以看到现在有类别,但标签列表在所有类别中都是空的!我也尝试过使用 Tag 类的建议 - ,但没有运气。
    • 啊!那行得通。万分感谢。那么,诀窍是使用 XMLArray 而不是 XMLArrayItem?
    • @Jay Yup 该属性被命名为Tags 而不是tags,与以前的问题相同。该死的区分大小写。
    猜你喜欢
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多