ISizableizable没有属性做什么?

可能重复:
使用Serializable属性和实现ISerializable有什么区别?

使用Serializable标记类的Serializable是什么? 例如:

 [Serializable] public Hashtable { } 

它与实现ISerializable的类有什么不同? 例如:

 public Hashtable : ISerializable { } 

那么将类标记为Serializable并实现ISerializable会有什么不同? 例如:

 [Serializable] public Hashtable : ISerializable { } 

[Serializable]ISerializable相反的目的是什么?

tl;博士 :什么是[Serializable]

我以为你已经链接到Serializable ,但你没有:

默认情况下, SerializableAttribute化由SerializableAttribute标记的类型中的所有公共和私有字段,除非该类型实现ISerializable接口以覆盖序列化过程。

和,

即使该类还实现了ISerializable接口,也应用SerializableAttribute属性[…]

也就是说, Serializable属性表示可以序列化此类型。 ISerializable表示此类型想要控制此类型的序列化方式。


或者,换句话说,你的问题是用错误的方式表达的。 应始终应用SerializableAttribute (对于可序列化的类),并且是序列化的“基本”级别。 ISerializable增加了更多(通过允许您编写代码来控制进程)。

ISerializable意味着您必须覆盖/实现方法void GetObjectData

[Serializable]指令让编译器知道这个类可以被序列化。 如果类不符合要求,CLR将抛出exception:即默认构造函数,未知类型等