- PR -

ArrayListのデシリアライズ

1
投稿者投稿内容
乃愛
会議室デビュー日: 2006/07/10
投稿数: 7
投稿日時: 2006-08-23 19:50
XmlSerializeのメソッドを使用してシリアライズ/デシリアライズを行っております。
xmlに対応するクラスを作成しシリアライズできることを確認しました。
デシリアライズでつまずいております。

実行が失敗するわけではありません。
xmlに対応するクラス内にArrayListがあるのですが、
デシリアライズ後の変数を確認するとLength=0ということでデータを取得する事ができません。
もともとのデータが存在しないというわけでもありません。

アドバイスの程、よろしくお願いします。


クラス
コード:
Public Class xmlClass
    ' コンストラクタ
    Public Sub New()
        Me.objDetails = New ArrayList
    End Sub

    ' メンバ
    Private strName As String
    Private objDetails As ArrayList

    ' プロパティ
    <XmlElement()> _
    Public Property Name() As String
        Get
            Return Me.strName
        End Get
        Set(ByVal Value As String)
            Me.strName = Value
        End Set
    End Property

    <XmlArrayItem([Type]:=GetType(objA)), _
     XmlArrayItem([Type]:=GetType(objB))> _
    Public Property Details() As ArrayList
        Get
            Return Me.objDetails
        End Get
        Set(ByVal Value As ArrayList)
            Me.objDetails = Value
        End Set
    End Property

End Class



デシリアライズ
コード:
    Dim fileName As String = "c:\sample.xml"
        Dim serialize As New XmlSerializer(GetType(xmlClass))
        Dim fs As New FileStream(fileName, FileMode.Open)

        Dim sample As xmlClass

        Try
            sample = CType(serialize.Deserialize(fs), xmlClass)
        Catch ex As Exception
            Debug.WriteLine(ex.Message)
        Finally
            fs.Close()
        End Try

Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2006-08-24 12:24
XmlSerializerクラスのインスタンスを生成する際に、
対象となるArrayListに含まれるクラス(objAとobjBのクラス)を
指定する必要があるかと思います。

実際には

Dim serialize As New XmlSerializer(GetType(xmlClass))

において、第2引数としてobjAとobjBのTypeを収納した配列を
指定してあげれば大丈夫かと思います。

Dim serialize As New XmlSerializer(GetType(xmlClass), [配列])

このような感じでしょうか。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-08-24 21:54
 XmlArrayAttribute 属性の指定が足りないだけのような気がします。

 また、ArrayList なので、Set アクセッサは要らないと思います。
 ところで、シリアライズしたファイルの中に、対象のオブジェクト配列が含まれていることは、確認してありますか?
乃愛
会議室デビュー日: 2006/07/10
投稿数: 7
投稿日時: 2006-08-25 10:54
引用:
Dim serialize As New XmlSerializer(GetType(xmlClass), [配列])



してみましたが、結果に変わりはありませんでした。

引用:
ところで、シリアライズしたファイルの中に、対象のオブジェクト配列が含まれていることは、確認してありますか?



はい、してあります。
XmlArrayAttributeについて再度見直してみます。




シリアライズして作成されたファイルをデシリアライズしても該当箇所のみnothingになってました。
1

スキルアップ/キャリアアップ(JOB@IT)