[英]DataContract XML serialization and XML attributes with VB.NET
[英]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文字,因此我更喜歡使用它並為我的類定義ToXml
和FromXml
方法。
這將為您提供所需的內容,而無需實現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.