我知道[Serializable]
标记了一个可序列化的类型,而ISerializable
使您可以通过实现GetObjectData
来进行自定义序列化/反序列化,所以您可以看到下面这样的代码:
[Serializable]
public class MyType : ISerializable {
...
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { ... }
}
我的问题是,当一个类型实现ISerializable
时,它隐式地指示这个类型是"可串行化";,因为逻辑是,如果你能控制自己想做什么就做什么,那么你就是";"有能力";为了做到这一点,所以我认为在一个类型实现ISerializable
时省略[Serializable]
不是更好吗?
是,忽略它!使用ISerializable,您可以通过GetObjectData覆盖来定义自定义杀菌行为。对于字段上的单个属性,使用该属性更好。下面是一个更详细的例子。在StackOverflow 上使用这个自定义序列化的例子