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 に答える