由于有多个列表,我无法反序列化此表,我知道我需要一个列表供我重复使用,但对于我的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中的每个值的任何想法?谢谢!
答案 0 :(得分: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>
要解决这个问题,你只需要两个类:
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