DOBON.NET DOBON.NETプログラミング掲示板過去ログ

配列を持つクラスの配列をシリアライズ

環境/言語:[C#/.Net Framework2.0]
分類:[.NET]

2009/03/29(Sun) 22:31:43 編集(投稿者)

はじめまして。

ややこしいタイトルで申し訳ないですが、string配列をパブリックなプロパティとしてもつ
クラスを配列として利用しています。

これをxmlにシリアライズしたいのですが、実際シリアライズすると
他のプロパティは書き込まれるのですが、string配列のプロパティのみ
書き込まれません。

何か方法があればご教示ください。

よろしくお願いいたします。

以下コードです。

------------------------------------------------------
  [Serializable]
  public class CData {

    private string _text;
    private string[] _textArr;

    public string Text {
      set { _text = value; }
      get { return _text; }
    }

    public string[] TextArr {
      get { return _textArr; }
    }

    public void SetValues ( string text, string[] textArray ) {
      _text = text;
      _textArr = textArray ;
    }
  }

  class Program {
    static void Main ( string[] args ) {

      List<CData> arr = new List<CData> ();
      CData cdata = null;

      for ( int i = 0; i < 3; i++ ) {
        cdata = new CData ();

        string[] s = new string[ 5 ];
        for ( int j = 0; j < 5; j++ ) {
          s[ j ] = "配列" + j.ToString ();
        }
        cdata.SetValues ( "property_" + i.ToString (), s );
        arr.Add ( cdata );
      }

      System.Xml.Serialization.XmlSerializer seralizer = new System.Xml.Serialization.XmlSerializer ( typeof ( CData[] ) );
      using ( FileStream fs = new FileStream ( Application.StartupPath + @"\data.xml", FileMode.Create ) ) {
        seralizer.Serialize ( fs, (CData[])arr.ToArray () );
      }
    }
  }
------------------------------------------------------
XmlSerializer のシリアライズ対象になるプロパティは、get/set 両方を持つもののみです。
そうでないとデシリアライズ時に値を設定できませんからね。
■No24295に返信(Hongliangさんの記事)
> XmlSerializer のシリアライズ対象になるプロパティは、get/set 両方を持つもののみです。
> そうでないとデシリアライズ時に値を設定できませんからね。


なるほどそういう事でしたか。勉強不足でした。
BinaryFormatter 利用時は上記の例で実働したので、同様にできると思っていました。

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板