0

これは私の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
Imports System.IO

Class main

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 class1()
    p2 = x.Deserialize(objStreamReader)
    objStreamReader.Close()

    MsgBox(p2.name)
    MsgBox(p2.one)
    MsgBox(p2.two)

End Sub

End Class

そして私のクラス:

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>

どうやって数字を計算するのですか?テストのプロパティであることは知っていますが、プロパティとして1つと2つあるため、クラスでもあります。正しいアプローチは何でしょうか。

アップデート:

<?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>
4

1 に答える 1

1

この例の XML をデシリアライズするには、データ クラスを次のようにします。

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
于 2012-10-08T17:54:01.477 に答える