デシリアライズ/シリアライズにのみ必要なデータを格納するためにクラスにフィールドを追加することを回避できますか?
私がいくつかのクラスを持っているとしましょう:
[Serializable]
class MyClass {
[NonSerialized]
NonSerializableDataType myField;
SomeOtherDataType serializableTemporaryData;
[OnSerializing]
OnSerializing (StreamingContext context) {
// build serializableTemporaryData from myField
}
[OnDeserialized]
void OnDeserialized (StreamingContext context) {
// build myField from serializableTemporaryData
}
}
serializableTemporaryData
の各オブジェクトにフィールドが含まれないようにする方法はありMyClass
ますか?たとえば、静的にすることはできますか(おそらく、On ...メソッドを変更することによって)?
制約:の実装を変更することはできませんNonSerializableDataType
。
例:myFieldにリソースへのハンドルが含まれているとします。次に、シリアル化の際に、逆シリアル化後にリソースを取得する方法に関する情報を保存する必要がありますが、ハンドル自体を保存することはできません。ハンドルを別のクラスにラップすると、問題がラッパークラスに移されただけです。その場合、ラッパークラスについてもまったく同じ質問をします。