【问题标题】:vb.net xml de-serializationvb.net xml反序列化
【发布时间】:2017-05-10 15:22:14
【问题描述】:

我有以下 XML,我一生都无法弄清楚反序列化的类会是什么样子。

<?xml version="1.0" encoding="utf-16"?>
<Root>
    <AL>
       <AcctName>Test</AcctName>
       <RetentionCodes>
           <RetentionCode Del="N">ZZZZZ</RetentionCode>
           <RetentionCode Del="N">XXXXX</RetentionCode>
       </RetentionCodes>
    </AL>
</Root>

到目前为止,我的课程是这样的:

<Serializable(), XmlRoot("Root")>
Public Class clsRecord Inherits clsFunctions(Of clsRecord)

Private m_AL As clsAL = Nothing
 <XmlElement("AL")>
 Public Property AL() As clsAL
    Get
        Return m_AL
    End Get
    Set(ByVal value As clsAL)
        m_AL = value
    End Set
 End Property

 Public Sub New()
 End Sub

 End Class

Public Class clsAL Inherits clsFunctions(Of clsAL)

 Private m_AcctName As String = String.Empty
 Public Property AcctName() As String
    Get
        Return m_AcctName
    End Get
    Set(ByVal value As String)
        m_AcctName = value.ToString
    End Set
 End Property

<XmlArrayItem("RetentionCode")>
Public Property RetentionCodes As List(Of String)

End Class

我可以获取节点值,但我不确定如何将 DEL 属性添加到类中,而不是创建一个单独的 RetentionCode 类。

【问题讨论】:

  • 您使用的是哪个版本的 Visual Studio?
  • @Steve Sirica,多年来,我们一直在摆脱变量和类名的旧时尚前缀,就像你拥有它们一样。只需在不带前缀的情况下命名它们,您就有更好的可读性。
  • 是的,RetentionCode 将是一个类,因为DEL 将是一个属性。这里的 XML 将引用主类上的一个属性,它是一个 List(Of RetentionCode),因此有多个条目。
  • 我最终改变了方向。我最终用 3 个元素使它成为自己的对象。罐头使用一个属性。一切正常。一切都很好。感谢您的意见!

标签: xml vb.net serialization


【解决方案1】:

RetentionCode 必须是一个类。使用&lt;XmlArrayItem("RetentionCode")&gt; 列出 RetentionCode。

<XmlRoot("Root")>
Public Class clsRecord Inherits clsFunctions(Of clsRecord)
    Private m_AL As clsAL = Nothing
    <XmlElement>
    Public Property AL() As clsAL
        Get
            Return m_AL
        End Get
        Set(ByVal value As clsAL)
            m_AL = value
        End Set
    End Property
End Class

Public Class clsAL Inherits clsFunctions(Of clsAL)
    Private m_AcctName As String = String.Empty
    <XmlElement>
    Public Property AcctName() As String
        Get
            Return m_AcctName
        End Get
        Set(ByVal value As String)
            m_AcctName = value.ToString
        End Set
    End Property
    <XmlArrayItem("RetentionCode")>
    Public Property RetentionCodes As List(Of RetentionCode)
End Class

Public Class RetentionCode
    <XmlAttribute>
    Public Property Del As String
    <XmlTextAttribute>
    Public Property Value As String
End Class

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 2017-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2011-12-28
    相关资源
    最近更新 更多