当类型已经实现ISerializable时,为什么stll需要使用Serializable属性



我知道[Serializable]标记了一个可序列化的类型,而ISerializable使您可以通过实现GetObjectData来进行自定义序列化/反序列化,所以您可以看到下面这样的代码:

[Serializable]
public class MyType : ISerializable {
...
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) { ... }
}

我的问题是,当一个类型实现ISerializable时,它隐式地指示这个类型是"可串行化";,因为逻辑是,如果你能控制自己想做什么就做什么,那么你就是";"有能力";为了做到这一点,所以我认为在一个类型实现ISerializable时省略[Serializable]不是更好吗?

是,忽略它!使用ISerializable,您可以通过GetObjectData覆盖来定义自定义杀菌行为。对于字段上的单个属性,使用该属性更好。下面是一个更详细的例子。在StackOverflow 上使用这个自定义序列化的例子

最新更新