VB.NET / XmlArray / XmlArrayItem / T列表中的XML序列化

时间:2015-03-26 09:51:37

标签: xml vb.net serialization

我正在编写一个生成某些xml文件的小程序。

我希望我的xml结构如下:

<Root name="test" version="testV">
   <property name="Items">
      <property name="item1" />
      <property name="item2" />
      <property name="item3" />
   </property>
</Root>

这是我的Root(节点)类

<XmlRoot("Root")>
Public Class Root

    <XmlAttribute("name")> 
    Property Name As String = "test"

    <XmlAttribute("version")> 
    Property Version As String = "1.0"

    <XmlElement("property")> 
    Property Items As New Items

End Class

这是Items类

Public Class Items

    <XmlAttribute("name")> 
    Property Name As String = "Items"

End Class

这是我的序列化

Public Class Form2

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim test1 As New Root
    SerializeToXml(test1)

End Sub

Private Sub SerializeToXml(ser As Root)

    Dim ns As New XmlSerializerNamespaces
    ns.Add("", "")

    With New XmlSerializer(GetType(Root))
        Using writeStream As New StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "/data.xml")

            .Serialize(writeStream, ser, ns)
        End Using
    End With
End Sub

End Class

这是我的data.xml结果

<Root name="test" version"testV">
  <property name="Items"/>
</Root>

我的问题是:

因为我希望“Items”包含多个名为“property”的元素,我该如何使用?我用谷歌搜索了一下。关于xmlArray和带有List of T的XmlArrayItem但是我无法使它工作。

我将不胜感激任何建议或帮助。

1 个答案:

答案 0 :(得分:0)

您遇到的问题是,您的班级结构中尚未定义最低级别的元素。我建议扩展您的Items类的定义,以包含最低级元素的列表,并为最低级元素定义一个完全独立的类。我测试了这段代码,我觉得它的工作方式与你期望的一样:

<xmlroot("Root")> 
Public Class root

    <XmlAttribute("name")> 
    Property name As String

    <XmlAttribute("version")> 
    Property version As String

    <XmlElement("property")> 
    Property items As New items

End Class

Public Class items
    <XmlAttribute("name")> 
    Property name As String

    <XmlElement("property")> 
    Property item As List(Of oneitem)

End Class

Public Class oneitem

    <XmlAttribute("name")> 
    Property name As String

End Class