簡體   English   中英

VB.net XML序列化/反序列化,如何為列表放置屬性

[英]VB.net XML Serialization/Deserialization, How to Put Attributes for Lists

如果我想在VB中像這樣對XML進行序列化和反序列化:

  <SeveralListsOfPeople>
      <ListOfPeople groupname="Friends">
          <Person name="John">
          </Person>
          <Person name="Mary">
          </Person>
      </ListOfPeople>
      <ListOfPeople groupname="Family">
          <Person name="Karen">
          </Person>
          <Person name="Kyle">
          </Person>
          </ListOfPeople>
      <ListOfPeople groupname="Enemies">
          <Person name="Ben">
          </Person>
          <Person name="Chris">
          </Person>
      </ListOfPeople>
    </SeveralListsOfPeople>

如何將屬性“ groupname”添加到“ ListsOfPeople”? 我不知道如何將屬性添加到列表或數組。 我只知道如何向對象和根添加屬性。

這就是我認為應該起作用的方式:

Imports System.Xml.Serialization

<Serializable>
<XmlRoot("SeveralListsOfPeople")>
Public Class SeveralListsOfPeople
    Public Property ListOfPeople As List(Of Person)
    <XmlAttribute("groupname")> Public Property name() As String
    Public Sub New()
    End Sub
End Class

<Serializable>
Public Class Person
    Public Property title As String
    Public Property age As String
    <XmlAttribute("name")> Public Property name() As String
    Public Sub New()
    End Sub
End Class

基於這個答案對一個類似問題,你需要創建自己的PeopleCollection類,並實現IXmlSerializable得到這個一起工作System.Xml.Serialization

但是,由於這是vb.net並且我們具有XML文字,因此我更喜歡使用它並為我的類定義ToXmlFromXml方法。

這將為您提供所需的內容,而無需實現IXmlSerializable

Module Module1

Sub Main()
    Dim xml = <SeveralListsOfPeople>
                  <ListOfPeople groupname="Friends">
                      <Person name="John">
                      </Person>
                      <Person name="Mary">
                      </Person>
                  </ListOfPeople>
                  <ListOfPeople groupname="Family">
                      <Person name="Karen">
                      </Person>
                      <Person name="Kyle">
                      </Person>
                  </ListOfPeople>
                  <ListOfPeople groupname="Enemies">
                      <Person name="Ben">
                      </Person>
                      <Person name="Chris">
                      </Person>
                  </ListOfPeople>
              </SeveralListsOfPeople>

    Dim test = SeveralListsOfPeople.FromXml(xml)

    Console.WriteLine(test.ToXml)
    Console.ReadKey()
End Sub

Public Class SeveralListsOfPeople
    Public Property Lists As List(Of ListOfPeople)
    Public Function ToXml() As XElement
        Return <SeveralListsOfPeople>
                   <%= From l In Lists
                       Select x = l.ToXml %>
               </SeveralListsOfPeople>
    End Function
    Public Shared Function FromXml(ByVal xml As XElement) As SeveralListsOfPeople
        Return New SeveralListsOfPeople With
               {
                   .Lists = (From l In xml...<ListOfPeople>
                            Select ListOfPeople.FromXml(l)).ToList
               }
    End Function
End Class

Public Class ListOfPeople
    Public Property ListOfPeople As List(Of Person)
    Public Property name() As String
    Public Function ToXml() As XElement
        Return <ListOfPeople groupname=<%= name %>>
                   <%= From p In ListOfPeople
                       Select x = p.ToXml %>
               </ListOfPeople>
    End Function
    Public Shared Function FromXml(ByVal xml As XElement) As ListOfPeople
        Return New ListOfPeople With
               {
                   .name = xml.@groupname,
                   .ListOfPeople = (From p In xml...<Person>
                                    Select Person.FromXml(p)).ToList
               }
    End Function
End Class

Public Class Person
    Public Property title As String
    Public Property age As String
    Public Property name() As String
    Public Function ToXml() As XElement
        Return <Person name=<%= name %>>
                   <title><%= title %></title>
                   <age><%= age %></age>
               </Person>
    End Function
    Public Shared Function FromXml(ByVal xml As XElement) As Person
        Return New Person With
               {
                   .name = xml.@name,
                   .title = xml.<title>.Value,
                   .age = xml.<age>.Value
               }
    End Function

End Class

End Module

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM