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

lar*_*ryq 7 .net c# datatable xml-serialization

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

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

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

par*_*cle 13

我认为Silveira 评论意味着使用二进制序列化.而且与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);
    } 
Run Code Online (Sandbox Code Playgroud)

  • 默认情况下,无论使用何种格式化程序,DataSet和DataTable都将转换为XML(请参阅http://msdn.microsoft.com/en-us/magazine/cc163911.aspx).如果你想减小序列化对象的大小,它们都有一个名为"RemotingFormat"的属性需要设置为"SerializationFormat.Binary". (7认同)

Mua*_*Dib 10

我会去读/写xml方法.我们使用它非常广泛.它很快,很简单,它内置于框架中.

  • 我认为如果您包含代码示例,这个答案会更好.您可能知道如何使用读/写XML方法,问题的作者可能也是如此,但请记住,这个网站不仅仅是回答我们自己的问题.它是关于为遇到问题的其他人记录它们.到达此问题的其他用户可能不知道如何使用这些方法. (11认同)

Vai*_*red 7

重要提示:
如果您尝试使用二进制格式化程序序列化DataTable对象或DataSet对象,您仍将获得二进制文件,但它是一个相当大的文件,因为它充满了大量的XML数据.遗憾的是,二进制文件中的XML数据使得大型文件缺乏XML提供的可移植性和可读性优势.随后,反序列化此类文件可能需要几秒钟才能完成,并最终占用的内存比实际需要的多得多.因此,如果您选择ADO.NET对象的二进制序列化,因为您需要获得更紧凑的输出,那么您将失败.二进制序列化仍然是最节省空间的方法,但是对于ADO.NET对象,它并没有被证明是有效的.

有关完整参考,请阅读以下文章: -
http://msdn.microsoft.com/en-us/magazine/cc188907.aspx