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:即默认构造函数,未知类型等