データ コントラクトのシリアル化を使用して、カスタム クラスをシリアル化および逆シリアル化しようとしています。シリアル化はうまく機能します。ただし、逆シリアル化すると、次の理由で問題が発生します ( source ):
オブジェクトが逆シリアル化されるとき、コンストラクターは呼び出されません。
問題は、コンストラクターで少し初期化を行うことです。これには、いくつかのデータ構造が含まれます。
コンストラクターへの呼び出しがないと、データ構造はnull
無効になり、逆シリアル化中のセッター関数の呼び出しは失敗します。
アクセサーが使用される前に、逆シリアル化プロセスの前または最中にコンストラクターを呼び出したり、オブジェクトを初期化したりするにはどうすればよいですか?
次のように、属性を介してコールバックとして宣言できるメソッドがいくつかあります (同じソース)。
// This method is called after the object
// is completely deserialized. Use it instead of the
// constructror.
[OnDeserialized]
void OnDeserialized(StreamingContext context)
{
fullName = firstName + " " + lastName;
}
しかし、それらはすべて逆シリアル化後にトリガーされるようです。
XML シリアル化に切り替える必要がありますか?