我得到2類,例如:.NET二進制序列有條件而不ISerializable的
public class A
{
private B b;
...
}
public class B
{
...
}
我需要將對象序列A,使用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類,我們必須邏輯添加重複OnSerializing()爲A. B級應該決定什麼但不是A類或C類。
我不想使用ISerializable接口,因爲在類B中有太多變量必須添加到SerializationInfo中。
我可以爲B類創建一個SerializationSurrogate,它在GetObjectData()& SetObjectData()中不執行任何操作,然後在序列化到文件時使用它。然而,同樣的維護問題是因爲修改B類的人不能注意到SerializationSurrogate的存在會在序列化過程中發生什麼。
有沒有更好的選擇?
隨着'MarshalByRefObject',它**不是**序列化時遠程... –