2007年10月23日火曜日

[.NET]自作コントロールのプロパティのシリアライズ(前提)

先日書きました、「[.NET]自作コントロールのプロパティのシリアライズ 」ですが、前提条件を何も書いていなかったので、簡単に記載します。

用途としては、DataGridView のように列単位で処理や属性を新たに追加したい場合を想定しています。
こういった場合、バイナリフォーマットでリソースに情報を保存したい場合、以下のように実装します。
  • クラスに[Serializable]アトリビュートの付与
  • バイナリフォーマットでシリアライズ可能
  • シリアライズオブジェクトから復元可能なコンストラクタの実装

以下、コード例です。


//-------------------------------------------------
//■とあるコンポーネント
//-------------------------------------------------
public class DataGridValidator : Component
{
    private RequiredData[] items = new RequiredData[0];
    public RequiredData[] Items
    {
        get { return items; }
        set { items = value; }
    }

    private DataGridView dataGridView = null;
    public DataGridView DataGridView
    {
        set { dataGridView = value; }
        get { return dataGridView; }
    }

    public DataGridValidator()
        : base()
    {
    }
}

//-------------------------------------------------
//■とあるコンポーネントに集約されているクラス
//-------------------------------------------------
[Serializable]
public class RequiredData : ISerializable
{
    private bool required = false;
    public bool Required
    {
        get { return required; }
        set { required = value; }
    }

    private string message = String.Empty;
    public string Message
    {
        get { return message; }
        set { message = value; }
    }

    public RequiredData()
    {
    }

    // シリアライズ用コンストラクタ
    public RequiredData(SerializationInfo infoStreamingContext context)
    {
        Required = info.GetBoolean("Required");
        Message = info.GetString("Message");
    }

    #region ISerializable メンバ

    void ISerializable.GetObjectData(SerializationInfo infoStreamingContext context)
    {
        info.AddValue("Required"Required);
        info.AddValue("Message"Message);
    }
    #endregion
}

0 件のコメント: