2012-01-16 13 views
4

私はシリアル化しているクラスを持っています。私は[Serializable]と注釈を付けて、私はバイナリシリアライザを使用しています。すべてうまく動作します。インスタンスのシリアル化と逆シリアル化に反応します。

しかし、後で私は直列化できない新しいプロパティを導入しました。(再構築する必要のないGUIについて多くの混乱を招いています)クラスの他のプロパティに基づいてこれらのプロパティを計算することができます。

私はそれを2回行う必要があります。私はシリアライズするときに混乱をきれいにし、シリアライズの準備が整った状態にします。デシリアライゼーション - 必要なすべてのプロパティを再度計算します。

「イベント」インスタンスに反応する必要があります。インスタンスがシリアル化/逆シリアル化されています。

しかし、私はインターフェイスISerializableまたは抽象クラスAserializableを実装していないので、クラスアトリビュート[Serializable]しか実装していないため、これらのイベントを見つけることができません。

クラスがこのクラスの関心事ではないため、クラスがシリアル化されるときはわかりません。別のクラスのフィールドとしてシリアライズされます。

私はこれらのイベントに反応する方法はありますか?

+0

これを実現するには、「ISerializable」を実装する必要があります。 –

答えて

2

OnDeserializedAttributeとそれに関連する属性(OnSerializing、OnSerialized、OnDeserializing)を使用して、シリアル化/逆シリアル化プロセス中に呼び出される特別なメソッドを作成できます。

0

ビルドCustome Serialization ISerializableを実装します。 serilazationの前にオブジェクトを操作するにはOnSerializingAttributeを使用し、逆シリアル化する前に操作するにはOnDeserializingAttributeを使用してください。

+0

シリアル化プロセス自体と対話する予定がある場合は、ISerializableを実装する必要があることに注意してください。 OPの場合、属性と「シリアライズイベント」メソッドを使用すれば十分です。 –

0

[XmlIgnoreAttribute]の属性をチャンスと見なしましたか?これは、プロパティのシリアル化を防止します。シリアライゼーションワークフローを改ざんする必要はありません。

私は悪いです、あなたはdeserializationでいくつかのプロパティをリロードしたいと思いませんでした。では、なぜこれらをシリアル化しないのですか?オプションのサブオブジェクト、または何か?

+0

彼はバイナリシリアライザを使用しています。 '[XmlIgnoreAttribute]'はバイナリシリアライザには影響しません。バイナリまたはSOAPにシリアル化する場合はNonSerializedを、XmlSerializerを使用してXMLに厳密にシリアル化する場合はXmlIgnoreを使用します。 MSDNの '[NonSerializedAttribute]クラスの備考欄を参照してください。 http://msdn.microsoft.com/en-us/library/system.nonserializedattribute.aspx – Aphelion

+1

Dutifuly注意してください。ありがとうございました。しかし、問題はまだ残っています。なぜ、「disaply」属性を持つバニラシリアル化を使用しないで、GETアクセッサで+ valueコンピューティングを使用しないのですか? – Vinzz

関連する問題