所以这是一个简单的测试用例:
[Serializable]
class Base
{
}
[Serializable]
class Derived : Base
{
}
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, new Derived());
这里没什么特别的。如果您删除任何一个'Serializable'标签,那么BinaryFormatter
会对您大喊大叫,因为这些项目不可序列化。理论上,序列化DataTable
不应该起作用,因为DataTable的基类 - 'MarshalByValueComponent - isn't marked as serializeable either ('typeof(MarshalByValueComponent).IsSerializable
返回'false')。那么为什么BinaryFormatter忽略了这个而不是其他不可序列化的类型呢? (或者为什么MarshalByValueComponent
不能标记为可序列化?)
答案 0 :(得分:4)
DataSet
类的定义如下:
[SerializableAttribute]
public class DataSet : MarshalByValueComponent, IListSource,
IXmlSerializable, ISupportInitializeNotification, ISupportInitialize, ISerializable
请参阅:http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx
正如您所看到的,ISerializable
接口有一个实现。此接口允许对象控制自己的序列化和反序列化。