我正在尝试编写一个类来序列化/反序列化一些简单的东西:
<table border="1">
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
<tr>
<td>row 2, cell 1</td>
<td>row 2, cell 2</td>
</tr>
</table>
我已经达到了这一点(见下文),但却无法正确生成表格xml:
Imports System.Xml.Serialization
<XmlRoot("TABLE")>
Public Class HTMLTable
<XmlArray("")>
<XmlArrayItem(GetType(HTMLTableRow), elementName:="TR")>
Public Property Rows As New List(Of HTMLTableRow)
<XmlType("TR")>
Public Class HTMLTableRow
<XmlArray("TD")>
Public Property Cells As New List(Of HTMLTableCell)
End Class
<XmlType("TD")>
Public Class HTMLTableCell
<XmlText()>
Public Property Value As String
End Class
End Class
通过以下测试:
<Test()>
Public Sub SerializeTest()
Dim tbl As New HTMLTable
Dim row As New HTMLTable.HTMLTableRow
Dim cell As New HTMLTable.HTMLTableCell
row.Cells.Add(cell)
tbl.Rows.Add(row)
Debug.Print(XMLProcessor.Serialize(tbl))
End Sub
我无法让它序列化到这个东西。我尝试使用xsd生成类,但是它产生了大量的垃圾代码,我真的想手工维护它,因为它比xsd产生的怪物更容易,无论如何都没有。我上面做错了什么?
答案 0 :(得分:2)
尝试更改:
<XmlArray("")>
<XmlArrayItem(GetType(HTMLTableRow), elementName:="TR")>
Public Property Rows As New List(Of HTMLTableRow)
成:
<XmlElement("TR")>
Public Property Rows As New List(Of HTMLTableRow)
,并改变:
<XmlArray("TD")>
Public Property Cells As New List(Of HTMLTableCell)
成:
<XmlElement("TD")>
Public Property Cells As New List(Of HTMLTableCell)
这就是我在为同一任务使用XmlSerializer
时设置属性的方法。
我还会将HTMLTableRow
和HTMLTableCell
类移出HTMLTable
类。
另一方面,您的测试方法实际上不是一种测试方法,因为它不会执行任何Assert
,并且当结果不符合您的要求时它不会抛出异常!
答案 1 :(得分:2)
我认为你想要做的是使用一个内置类来生成HTML,而不是尝试序列化对象模型。
例如,请查看HtmlTextWriter,或者如果您想要更全面的功能,HTML Agility Pack
答案 2 :(得分:-2)
我没有看到在类级别声明的Serializable()属性。 最好的问候