1

かなり複雑なオブジェクトモデルがあり、特定の時間に現在の状態を保存する必要があり、特定の問題が発生した場合は、状態を元の状態に戻す必要があります。ほぼ元に戻す機能。

最初はディープコピーを検討しましたが、最終的にはモデルをバイナリにシリアル化し、必要に応じて逆シリアル化することにしました。私がこのようなことをしたのはこれが初めてで、最初はイベントハンドラーがシリアル化されないという問題がありました。これは[field:NonSerialized]属性で解決しました。

ただし、現在の問題は、モデルが逆シリアル化されると、イベントが機能しないことです。

これに対処するための最良の解決策は何でしょうか?いくつかの解決策に出くわしました。[OnDeserialized()]を使用するか、IDeserializationCallbackインターフェイスを実装してから、後続のメソッドで各イベントを再サブスクライブすることができます。

しかし、これはかなりの作業のように思えます。私はこれを経験したことがないので、先に進む前に、これが正しい方法であることを確認したかっただけです。

ありがとう。

4

1 に答える 1

2

オブジェクト モデルのイベントに関連付けられているイベント ハンドラーをシリアル化することはできません。モデルをデシリアライズした後、再サブスクライブする必要があります。

逆シリアル化したばかりのインスタンスを再サブスクライブするように他のクラスに通知する必要があるため、IDeserializationCallback インターフェイスを使用します。

于 2012-05-18T13:29:43.713 に答える