为什么我的.Net对象不可序列化?

时间:2010-06-02 22:01:14

标签: .net vb.net serialization

我有一个继承自System.Data.DataTable的'MyDataTable'类

我已经在我的课程中实现了ISerializable,并且有一个'Public Overrides Sub GetObjectData ...'

但是当我尝试序列化'MyDataTable'的对象时,我收到一条错误消息,说'MyDataTable'没有标记为可序列化。

如果我改为使用DataTable,我的代码会正确序列化。 如果我将一个serializable属性添加到'MyDataTable'类 - 它正确序列化,但我被告知如果我实现ISerializable则不需要。

有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:8)

无论谁告诉你没有必要添加SerializableAttribute是不正确的:

  

应用SerializableAttribute属性,即使该类还实现了ISerializable接口来控制序列化过程。

ISerializable条目( em 添加):

  

任何可能序列化的类必须使用SerializableAttribute 进行标记。如果类需要控制其序列化过程,则可以实现ISerializable接口。

答案 1 :(得分:1)

即使您实现了ISerializable,也需要添加SerializableAttribute。虽然这讨论了FxCop规则,但这来自http://msdn.microsoft.com/en-us/library/ms182350(VS.80).aspx

  

得到普通人的认可   语言运行时可序列化,   类型必须标有   SerializableAttribute属性甚至   如果类型使用自定义   序列化例程通过   ISerializable的实现   接口