0

我已经在 .Net 中使用 XmlSerializer 成功反序列化了我的 xml 文件,但是尝试将该数据序列化回 xml 文件变得令人沮丧。当我尝试序列化我的类时,我只得到没有子元素的 xml 的根标记。如何序列化所有对象以获取正确的 xml 数据?我在某处看到有人建议在集合中添加要序列化的类,然后序列化该集合,但我无法解决这个问题,或者有更简单的方法吗?任何帮助表示赞赏!这是我的代码:

    Public Shared Function SerializeXml() As Byte()

    Dim serializer As New XmlSerializer(GetType(Data))
    Dim nameSpaces As XmlSerializerNamespaces = New XmlSerializerNamespaces()
    Dim mStream As New MemoryStream()
    Dim result As Byte()
    Dim target As New Data()

    nameSpaces.Add(String.Empty, String.Empty)

    serializer.Serialize(mStream, target, nameSpaces)

    result = mStream.ToArray()

    Return result

这是带有属性的 xml 的通用示例:

<?xml version"1.0">
<RootTag>
  <ChildTag Label="Label1" Value="Value1"/>
  <ChildTag Label="Label2" Value="Value2"/>
</RootTag>

编辑:这是我的数据类:

Imports System.Xml.Serialization

<XmlRoot("DATA", [Namespace]:="", IsNullable:=False)>
Public Class Data
    Inherits Model


<XmlElement("CONFIGURATION")>
Public Property Configuration() As DataConfiguration
    Get
        Return Me._Configuration
    End Get
    Set(value As DataConfiguration)
        Me._Configuration = value
    End Set
End Property
Private _Configuration As DataConfiguration


<XmlElement("FIELD")>
Public Property Field() As Field
    Get
        Return Me._Field
    End Get
    Set(value As Field)
        Me._Field = value
    End Set
End Property
Private _Field As Field


<XmlElement("LIST")>
Public Property ListRoot() As List(Of ListRoot)
    Get
        Return Me._ListRoot
    End Get
    Set(value As List(Of ListRoot))
        Me._ListRoot = value
    End Set
End Property
Private _ListRoot As List(Of ListRoot)

End Class
4

1 回答 1

0

这是你的问题,<XmlRoot("DATA", [Namespace]:="", IsNullable:=False)>. IsNullable属性设置为 false 时,如果项目等于空,则将省略项目的 XML。如果您将 设置IsNullable为 True,那么它将发出这样的标签<ListRoot xsi:nil = "true" />。在您的代码示例中,由于您刚刚创建了一个这样的新Data类,因此默认情况下Dim target As New Data()所有成员都是如此Nothing。由于您设置了IsNullable = False,您应该只看到该根标记,这将是数据的有效序列化。

于 2012-12-07T20:21:59.363 回答