【发布时间】:2011-06-05 05:09:16
【问题描述】:
我有 2 节课,例如:
public class A
{
private B b;
...
}
public class B
{
...
}
我需要使用 BinaryFormatter 序列化对象 A。远程处理时应包括字段 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 中一样添加重复的 OnSerializing() 逻辑。B 类应该决定做什么,而不是 A 类或 C 类。
我不想使用 ISerializable 接口,因为 B 类中有太多变量必须添加到 SerializationInfo 中。
我可以为 B 类创建一个 SerializationSurrogate,它在 GetObjectData() 和 SetObjectData() 中不执行任何操作,然后在序列化到文件时使用它。然而,同样的维护问题,因为无论谁修改 B 类都无法注意到序列化过程中会发生什么以及 SerializationSurrogate 的存在。
还有更好的选择吗?
【问题讨论】:
-
使用
MarshalByRefObject,远程时它不序列化...
标签: c# serialization binary