概要
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月のサービスリリースビルドが適用されていることが必要です