概要

Infragistics Windows Forms 26.1 以降では、一部のコントロールで使用されるバイナリ保存・読み込み処理において、従来の .NET BinaryFormatter に代わり、新しい Infragistics 独自のシリアル化機構が使用されます。
SaveAsBinary / LoadFromBinary、または同等の Save / Load メソッドの公開 API は従来と同じです。そのため、通常の使用では呼び出しコードを変更する必要はありません。
ただし、Infragistics コントロールを継承した派生クラスや、アプリケーション独自のシリアル化対象型を使用している場合は、追加の対応が必要になることがあります。

26.1 での変更点

BinaryFormatter は、逆シリアル化時に任意の型を生成できるため、セキュリティ上のリスクがあります。そのため .NET では非推奨化・制限が進められています。
これに対応するため、Infragistics Windows Forms 26.1 以降では、BinaryFormatter の代替として InfragisticsSerializer が導入されています。
新しいシリアル化機構では、安全性を高めるため、逆シリアル化時に型を無制限に生成せず、Infragistics が認識している型、信頼された .NET / Microsoft の型、または明示的に登録された型のみを生成します。

派生型・独自型を使用している場合

アプリケーション側で定義した派生型や独自型は、自動的には復元されません。
たとえば、UltraDockManager を継承した独自クラスをバイナリ形式で保存・復元する場合は、LoadFromBinary / Load を呼び出す前に、その型を InfragisticsSerializer に登録する必要があります。

InfragisticsSerializer.RegisterFactory(
    typeof(MyUltraDockManager),
    (info, context) => new MyUltraDockManager(info, context));

サンプルコード

以下は、UltraDockManager の派生クラスを登録し、独自プロパティをシリアル化する例です。

using System;
using System.Runtime.Serialization;
using Infragistics.Shared.Serialization;
using Infragistics.Win.UltraWinDock;

[Serializable]
public class MyUltraDockManager : UltraDockManager
{
    private string _customStringProperty = string.Empty;

    static MyUltraDockManager()
    {
        InfragisticsSerializer.RegisterFactory(
            typeof(MyUltraDockManager),
            (info, context) => new MyUltraDockManager(info, context));
    }

    public MyUltraDockManager()
    {
    }

    protected MyUltraDockManager(
        SerializationInfo info,
        StreamingContext context)
        : base(info, context)
    {
        _customStringProperty = info.GetString("CustomStringProperty");
    }

    protected override void GetObjectData(
        SerializationInfo info,
        StreamingContext context)
    {
        base.GetObjectData(info, context);

        if (ShouldSerializeCustomStringProperty())
        {
            info.AddValue("CustomStringProperty", _customStringProperty);
        }
    }

    protected override void InitializeFrom(UltraDockManager source)
    {
        base.InitializeFrom(source);

        if (source is MyUltraDockManager mySource)
        {
            _customStringProperty = mySource._customStringProperty;
        }
    }

    public string CustomStringProperty
    {
        get { return _customStringProperty; }
        set { _customStringProperty = value; }
    }

    public bool ShouldSerializeCustomStringProperty()
    {
        return !string.IsNullOrEmpty(_customStringProperty);
    }

    public void ResetCustomStringProperty()
    {
        _customStringProperty = string.Empty;
    }
}

実装時の注意点

  • RegisterFactory は、LoadFromBinary / Load を呼び出す前に実行してください。
  • 派生型や独自型が複数ある場合は、それぞれ登録が必要です。
  • 逆シリアル化用コンストラクターは、SerializationInfo と StreamingContext を受け取る形で定義します。
  • 独自プロパティを保存する場合は、GetObjectData で SerializationInfo に値を追加します。
  • 必要に応じて InitializeFrom をオーバーライドし、独自プロパティをコピーします。
  • 2026年9月のサービスリリースビルドが適用されていることが必要です

製品について

Ultimate UI for Windows Forms