バイナリ シリアル化を使用してディープ クローンされたデータ オブジェクトがあります。このデータ オブジェクトは、PriceChanged などのプロパティ変更イベントをサポートします。
PriceChanged にハンドラーを追加したとします。コードが PriceChanged をシリアル化しようとすると、ハンドラーがシリアル化可能としてマークされていないという例外がスローされます。
私の代替案:
- シリアル化の前にイベントからすべてのハンドラーを簡単に削除することはできません
- すべてのハンドラーの依存関係も再帰的にマークする必要があるため、ハンドラーをシリアル化可能としてマークしたくありません。
- PriceChanged を NonSerialized としてマークしたくありません。ハンドラーを持つ可能性のあるこのようなイベントが数十あります。EDIT:これができないもう1つの理由は、データクラス(したがってイベント)が生成され、生成コードを直接制御できないためです。理想的には、生成コードはすべてのイベントを NonSerialized としてマークするだけです。
- 理想的には、.NET がその時点でオブジェクト グラフをたどるのをやめて、それを「リーフ」にすることを望みます。では、.NET でクラス全体を NonSerialized としてマークできないのはなぜでしょうか?
--
最終的に、ハンドラーに ISerializable を実装させ、シリアル化コンストラクター/ GetDataObject メソッドで何もしないことで、この問題を回避しました。ただし、ハンドラーは依然としてシリアル化されており、すべての依存関係が null に設定されているため、それも考慮する必要がありました。
クラス全体のシリアル化を防ぐより良い方法はありますか? つまり、null 依存関係を考慮する必要がないものですか?