1

複数のリストがあるという事実のために、このテーブルを逆シリアル化するのに問題があります。trs が繰り返されるためのリストが必要ですが、tds も繰り返されるため、問題は次の値を読み取ろうとするときに発生します。私はリスト形式で持っているので、tds。

ここに私のxmlがあります:

<table>
 <tr>
  <td>1</td>
  <td>2</td>
 </tr>
 <tr>
  <td>3</td>
  <td>4</td>
 </tr>
</table> 

そして私のクラス:

Public Class table
    Private newtr As List(Of tr)
    <XmlElement()> _
    Public Property tr() As List(Of tr)
        Get
            Return newtr
        End Get
        Set(ByVal value As List(Of tr))
            newtr = value
        End Set
    End Property
End Class


Public Class tr
    Private newtd As List(Of td)
    <XmlElement()> _
    Public Property td() As List(Of td)
        Get
            Return newtd
        End Get
        Set(ByVal value As List(Of td))
            newtd = value
        End Set
    End Property
End Class


Public Class td
    Private newvalue As String
    <XmlElement()> _
    Public Property td() As String
        Get
            Return newvalue
        End Get
        Set(ByVal value As String)
            newvalue = value
        End Set
    End Property
End Class

そして私のコード:

Public Sub test2()
    Dim rr As New table()
    Dim xx As New XmlSerializer(rr.GetType)
    Dim objStreamReader2 As New StreamReader("table.xml")
    Dim rr2 As New table()
    rr2 = xx.Deserialize(objStreamReader2)
    For Each ii As tr In rr2.tr
        MsgBox(ii.td)
    Next
End Sub

では、tds 内の各値を取得する方法についてのアイデアはありますか? ありがとう!

4

1 に答える 1

1

現在tr.td、リストとして宣言しているため、単一の文字列として出力することはできません。tdリスト内の各項目をループする必要があります。

For Each currTr As tr In rr2.tr
    For Each currTd As td In currTr.td
        MessageBox.Show(currTd.td)
    Next
Next

ただし、それではサンプル XML の値が適切に読み取られません。あなたの例では、各td要素には、同じ名前の別のサブ要素ではなく、文字列が含まれています。ただし、データ構造は、XML の構造が次のようになっていることを前提としています。

<table>
 <tr>
  <td>
   <td>1</td>
  </td>
  <td>
   <td>2</td>
  </td>
 </tr>
 <tr>
  <td>
   <td>3</td>
  </td>
  <td>
   <td>4</td>
  </td>
 </tr>
</table>

これを修正するには、次のような 2 つのクラスが必要です。

Public Class table
    Private newtr As List(Of tr)
    <XmlElement()> _
    Public Property tr() As List(Of tr)
        Get
            Return newtr
        End Get
        Set(ByVal value As List(Of tr))
            newtr = value
        End Set
    End Property
End Class


Public Class tr
    Private newtd As List(Of String)
    <XmlElement()> _
    Public Property td() As List(Of String)
        Get
            Return newtd
        End Get
        Set(ByVal value As List(Of String))
            newtd = value
        End Set
    End Property
End Class

次に、デシリアライズされたオブジェクトを次のようにループできます。

For Each currTr As tr In rr2.tr
    For Each currTd As String In currTr.td
        MessageBox.Show(currTd)
    Next
Next
于 2012-10-16T12:22:25.743 に答える