我有一个填充的DataTable我想序列化到一个文件供以后使用。我一直在寻找与此相关的选项,并想知道是否有人可以指出我正确的方向。
我将创建的是两种方法 - 一种用于将数据表写入文件,另一种用于使用文件作为输入创建新数据表。使用WriteXML()和Load()方法来执行此操作是否有意义,如果是这样,哪些标记是要关注的?感谢您的指导。
如果有帮助,我正在使用.Net 2.0。
答案 0 :(得分:13)
我认为Silveira comment意味着使用二进制序列化。而且与XML相比,它的速度非常快,与二进制相比,特别是对于大量数据而言,序列化非常慢。与XML相比,它在磁盘上占用的空间也少得多。
public static void Serialize(DataSet ds, Stream stream) {
BinaryFormatter serializer = new BinaryFormatter();
serializer.Serialize(stream, ds);
}
public static DataSet Deserialize(Stream stream) {
BinaryFormatter serializer = new BinaryFormatter();
return (DataSet)serializer.Deserialize(stream);
}
答案 1 :(得分:10)
我会选择读/写xml方法。我们使用它非常广泛。它很快,很简单,它内置于框架中。
答案 2 :(得分:7)
重要要点:
如果您尝试使用二进制格式化程序序列化DataTable
对象或DataSet
对象,您仍将获得二进制文件,但它是一个相当大的文件,因为它充满了大量的XML数据。遗憾的是,二进制文件中的XML数据使得大型文件缺乏XML提供的可移植性和可读性优势。随后,反序列化此类文件可能需要几秒钟才能完成,并最终占用的内存比实际需要的多得多。因此,如果您选择ADO.NET对象的二进制序列化,因为您需要获得更紧凑的输出,您将失败。二进制序列化仍然是最节省空间的方法,但是使用ADO.NET对象并不能证明它有效。
如需完整参考,请阅读以下文章: -
http://msdn.microsoft.com/en-us/magazine/cc188907.aspx
答案 3 :(得分:1)
您可以使用将数据库序列化为带有标头的CSV文件的基本技术。某些数据库管理系统支持从这些文件轻松加载数据。如果您的dbms没有,那么编写一些为您执行此操作的代码并不会太困难。这会回答你的问题吗?
在我看来,xml的缺点是它包含的元数据可能比实际数据多。如果是csv文件,则不会重复元数据。
答案 4 :(得分:0)
数据表是内存中的对象吗?如果是这样,您可以简单地使用Serialize和Deserialize Methods。它们相对较快,您可以将结果保存在任何您想要的位置。