gpt4 book ai didi

c# - 为什么 DataTable 是可序列化的?

转载 作者:行者123 更新时间:2023-11-30 15:34:18 24 4
gpt4 key购买 nike

所以这是一个简单的测试用例:

[Serializable]
class Base
{

}

[Serializable]
class Derived : Base
{

}

BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, new Derived());

这里没有什么特别的。如果您删除任何一个“Serializable”标签,BinaryFormatter 就会对您大喊大叫,因为这些项目不可序列化。那么从理论上讲,序列化一个 DataTable 也不应该工作,因为 DataTable 的基类 - 'MarshalByValueComponent - 也没有标记为可序列化('typeof(MarshalByValueComponent).IsSerializable 返回“假”)。那么为什么 BinaryFormatter 会忽略这个而不是其他不可序列化的类型呢? (或者为什么 MarshalByValueComponent 一开始就没有标记为可序列化?)

最佳答案

DataSet类定义如下:

[SerializableAttribute]
public class DataSet : MarshalByValueComponent, IListSource,
IXmlSerializable, ISupportInitializeNotification, ISupportInitialize, ISerializable

参见:http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx

如您所见,有一个ISerializable 接口(interface)的实现。该接口(interface)允许一个对象控制它自己的序列化和反序列化。

关于c# - 为什么 DataTable 是可序列化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16347675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com