如何使用反序列化程序读取XML文件中的内部数据?
这是我的XML文件:如何使用反序列化程序读取XML文件中的内部数据?,xml,vb.net,xml-serialization,Xml,Vb.net,Xml Serialization,这是我的XML文件: <?xml version="1.0" encoding="utf-8"?> <test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <name>test</name> <one>1</one> <two>2</two>
<?xml version="1.0" encoding="utf-8"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<name>test</name>
<one>1</one>
<two>2</two>
</test>
我的班级:
Imports System.Xml.Serialization
Public Class test
Private newname As String
Private newone As Integer
Private newtwo As Integer
Public Property name() As String
Get
name = newname
End Get
Set(ByVal value As String)
newname= value
End Set
End Property
Public Property one() As Integer
Get
one = newone
End Get
Set(ByVal value As Integer)
newone = value
End Set
End Property
Public Property two() As Integer
Get
two = newtwo
End Get
Set(ByVal value As Integer)
newtwo = value
End Set
End Property
End Class
它可以工作,它会给我XML文件中包含数据的消息框,但是如果我像这样向XML文件添加内部节点,我会遇到问题:
<?xml version="1.0" encoding="utf-8"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<name>test</name>
<numbers>
<one>1</one>
<two>2</two>
</numbers>
</test>
Public Class test
Private newname As String
Private newnumbers As List(Of Numbers)
Public Property name() As String
Get
Return newname
End Get
Set(ByVal value As String)
newname = value
End Set
End Property
<XmlElement()> _
Public Property numbers() As List(Of Numbers)
Get
Return newnumbers
End Get
Set(ByVal value As List(Of Numbers))
newnumbers = value
End Set
End Property
End Class
Public Class Numbers
Private newone As Integer
Private newtwo As Integer
Public Property one() As Integer
Get
Return newone
End Get
Set(ByVal value As Integer)
newone = value
End Set
End Property
Public Property two() As Integer
Get
Return newtwo
End Get
Set(ByVal value As Integer)
newtwo = value
End Set
End Property
End Class
Sub Main()
Dim p As New test()
Dim x As New XmlSerializer(p.GetType)
Dim objStreamReader As New StreamReader("XML.xml")
Dim p2 As New test()
p2 = x.Deserialize(objStreamReader)
objStreamReader.Close()
MsgBox(p2.name)
For Each i As Numbers In p2.numbers
MsgBox(i.one)
MsgBox(i.two)
Next
End Sub
测试
1.
2.
我该怎么算出数字呢?我知道它是test的一个属性,但它也是一个类,因为它有一个和两个属性,所以正确的方法是什么
更新:
<?xml version="1.0" encoding="utf-8"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<name>test</name>
<numbers>
<one>1</one>
<two>2</two>
</numbers>
<numbers>
<one>3</one>
<two>4</two>
</numbers>
</test>
测试
1.
2.
3.
4.
要反序列化该示例XML,您希望数据类如下所示:
<?xml version="1.0" encoding="utf-8"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<name>test</name>
<numbers>
<one>1</one>
<two>2</two>
</numbers>
</test>
Public Class test
Private newname As String
Private newnumbers As List(Of Numbers)
Public Property name() As String
Get
Return newname
End Get
Set(ByVal value As String)
newname = value
End Set
End Property
<XmlElement()> _
Public Property numbers() As List(Of Numbers)
Get
Return newnumbers
End Get
Set(ByVal value As List(Of Numbers))
newnumbers = value
End Set
End Property
End Class
Public Class Numbers
Private newone As Integer
Private newtwo As Integer
Public Property one() As Integer
Get
Return newone
End Get
Set(ByVal value As Integer)
newone = value
End Set
End Property
Public Property two() As Integer
Get
Return newtwo
End Get
Set(ByVal value As Integer)
newtwo = value
End Set
End Property
End Class
Sub Main()
Dim p As New test()
Dim x As New XmlSerializer(p.GetType)
Dim objStreamReader As New StreamReader("XML.xml")
Dim p2 As New test()
p2 = x.Deserialize(objStreamReader)
objStreamReader.Close()
MsgBox(p2.name)
For Each i As Numbers In p2.numbers
MsgBox(i.one)
MsgBox(i.two)
Next
End Sub
我会调用类测试的属性吗?或者仅仅是类号的属性?它给了我这个错误:当我调用反序列化方法将其分配给另一个类时,XML文档(0,0)中有一个错误:o2=x.Deserialize(objStreamReader),这可能是因为它已经反序列化了吗?@user1676874您只需将它反序列化为单个
test
对象,并通过该对象访问numbers属性。我更新了我的答案以提供一个示例。它给了我一个错误:MsgBox(p2.numbers.one)错误:“one”不是“Integer”的成员。您一定复制了错误的内容。我在这里测试过,它对我来说很好。