[可序列化] 属性的作用是 ISerializable 没有的

本文关键字:ISerializable 作用 序列化 属性 | 更新日期: 2023-09-27 18:18:37

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

Serializable标记类有什么作用?例如:

[Serializable]
public Hashtable 
{
}

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

public Hashtable : ISerializable
{
}

这与将类标记为可序列化并实现ISerializable有何不同?例如:

[Serializable]
public Hashtable : ISerializable
{
}

ISerializable相比,[Serializable]的目的是什么?

博士:什么是[Serializable]

[可序列化] 属性的作用是 ISerializable 没有的

我以为你已经链接到可序列化,但你没有:

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

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

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


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

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

[Serializable] 指令让编译器知道可以序列化此类。如果类不满足要求,CLR 将抛出异常:即默认构造函数、未知类型等