1

データ コントラクトのシリアル化を使用して、カスタム クラスをシリアル化および逆シリアル化しようとしています。シリアル化はうまく機能します。ただし、逆シリアル化すると、次の理由で問題が発生します ( 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 シリアル化に切り替える必要がありますか?

4

1 に答える 1