序列化数据表以供以后重用

时间:2010-01-12 23:05:42

标签: c# .net xml-serialization datatable

我有一个填充的DataTable我想序列化到一个文件供以后使用。我一直在寻找与此相关的选项,并想知道是否有人可以指出我正确的方向。

我将创建的是两种方法 - 一种用于将数据表写入文件,另一种用于使用文件作为输入创建新数据表。使用WriteXML()和Load()方法来执行此操作是否有意义,如果是这样,哪些标记是要关注的?感谢您的指导。

如果有帮助,我正在使用.Net 2.0。

5 个答案:

答案 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。它们相对较快,您可以将结果保存在任何您想要的位置。