次のクラスのバイナリシリアル化を使用して保存されたデータがあります。
[Serializable]
public abstract class BaseBusinessObject
{
private NameValueCollection _fieldErrors = new NameValueCollection();
protected virtual NameValueCollection FieldErrors
{
get { return _fieldErrors; }
set { _fieldErrors = value; }
}
...
}
ある時点で、クラスは次のように変更されました。
[Serializable]
public abstract class BaseBusinessObject
{
private Dictionary<string, string> _fieldErrors = new Dictionary<string, string>();
protected virtual Dictionary<string, string> FieldErrors
{
get { return _fieldErrors; }
set { _fieldErrors = value; }
}
...
}
これにより、古いデータの逆シリアル化で問題が発生します。
私が最初に考えたのは実装することでしたISerializable
が、このクラスには多数のプロパティと、これを実装する必要のある数百の継承クラスがあります。
デシリアライズ中に現在の構造に一致するように古いデータを変更するか、古いデータをクリーンにアップグレードする方法が必要です。