2012-01-26 18 views
1

我试图写一个类序列化/反序列化简单的东西反序列化的HTML表:如何序列化/ .NET中

<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生成的怪物更容易,而这些怪物无论如何都不起作用。我在上面做错了什么?

+2

之前回答,你在试图使用该结果在某种现实应用的这样做,或者你只是想学习序列化? –

+0

在一家内部商店,人们停止编写HTML代码来在其VB.NET代码中生成表格。为什么会影响你的答案? – Denis

+1

因为有这样的内置类。见http://msdn.microsoft.com/en-us/library/system.web.ui.htmltextwriter.aspx –

回答

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时,我将设置属性。

我还会将HTMLTable类中的HTMLTableRowHTMLTableCell类移出。

另一方面,您的测试方法不是真正的测试方法,因为它不会执行任何Assert,并且当结果不符合您的要求时它不会引发异常!

+0

你达人!!!正是我需要的。这个测试不是一个真正的测试方法......这是我试图让序列化以我想看到的方式工作。我打算用Assert重写一次... – Denis

+0

你正在做反向测试... :) –

-2

我没有看到在类级别声明的序列化()属性.. 问候

+0

你不需要它。 –

2

我想你想在这里做的是使用内置类的一个用于生成HTML,而比试图序列化一个对象模型。

退房HtmlTextWriter,例如,或者如果你想更全面的功能,HTML Agility Pack

+0

有趣的想法...将必须检查出来... – Denis

+0

太糟糕了,我们在.NET 2.0 stil – Denis

+0

HTML敏捷包是基于2.0-从网站:“在这里发布的CodePlex版本是为.NET Framework 2.0“ –