如何使用反序列化程序读取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文件:

<?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”的成员。您一定复制了错误的内容。我在这里测试过,它对我来说很好。