のない私には、例えば、2クラスを得た:.NETバイナリシリアル条件付きISerializable
public class A
{
private B b;
...
}
public class B
{
...
}
は私がオブジェクト使用にBinaryFormatterをシリアル化する必要があります。リモーティング時にはフィールドbをインクルードしますが、ファイルにシリアル化するときはインクルードしません。ここで私は追加するものである:
[Serializable]
public class A : MarshalByRefObject
{
private B b;
[OnSerializing]
private void OnSerializing(StreamingContext context)
{
if (context.State == StreamingContextStates.File)
{
this.b = null;
}
}
...
}
[Serializable]
public class B : MarshalByRefObject
{
...
}
私はこれは悪いデザインだと思う別のクラスCもBが含まれている場合ので、何を決定する必要があり、クラスCに我々はA.クラスBのように重複OnSerializing()のロジックを追加する必要がありますクラスAまたはCではありません。
クラスBの変数が多すぎるため、SerializationInfoに追加する必要があるため、ISerializableインターフェイスを使用しません。
GetObjectData()& SetObjectData()で何も実行しないクラスBのSerializationSurrogateを作成し、ファイルにシリアル化するときに使用することができます。ただし、クラスBを変更する人は、シリアル化中に何が起こるか気づくことができないので、同じメンテナンスの問題& SerializationSurrogateの存在。
もっと良い選択肢はありますか?
'MarshalByRefObject'では、リモートでは** **シリアル化されていません。 –