今天做一个项目中用到把DataSet对象序列化成文件,并上传到服务器,不过生成的文件比较大,就想着压缩一下,找了一下资料,用GZipStream来压缩了一下,效果还是非常理想的。现在把这部分代码整理了一下:
using System.Data; using System.IO; using System.IO.Compression; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; namespace DataSetSerializerDeserialize { class Program { /// <summary> /// 序列化DataSet对象并压缩 /// </summary> /// <param name="ds"></param> static void DataSetSerializerCompression(DataSet ds) { IFormatter formatter = new BinaryFormatter();//定义BinaryFormatter以序列化DataSet对象 MemoryStream ms = new MemoryStream();//创建内存流对象 formatter.Serialize(ms, ds);//把DataSet对象序列化到内存流 byte[] buffer = ms.ToArray();//把内存流对象写入字节数组 ms.Close();//关闭内存流对象 ms.Dispose();//释放资源 FileStream fs = File.Create("datasetCompression.dat");//创建文件 GZipStream gzipStream = new GZipStream(fs, CompressionMode.Compress, true);//创建压缩对象 gzipStream.Write(buffer, 0, buffer.Length);//把压缩后的数据写入文件 fs.Close();//关闭流 fs.Dispose();//释放对象 } /// <summary> /// 不压缩直接序列化DataSet /// </summary> /// <param name="ds"></param> static void DataSetSerializer(DataSet ds) { IFormatter formatter = new BinaryFormatter();//定义BinaryFormatter以序列化DataSet对象 FileStream fs = File.Create("dataset.dat");//创建文件 formatter.Serialize(fs, ds);//把DataSet对象序列化到文件 fs.Close();//关闭流 fs.Dispose();//释放对象 } static void Main(string[] args) { DataTable table = new DataTable("ParentTable"); DataColumn column; DataRow row; column = new DataColumn(); column.DataType = System.Type.GetType("System.Int32"); column.ColumnName = "id"; column.ReadOnly = true; column.Unique = true; table.Columns.Add(column); column = new DataColumn(); column.DataType = System.Type.GetType("System.String"); column.ColumnName = "ParentItem"; column.AutoIncrement = false; column.Caption = "ParentItem"; column.ReadOnly = false; column.Unique = false; table.Columns.Add(column); DataColumn[] PrimaryKeyColumns = new DataColumn[1]; PrimaryKeyColumns[0] = table.Columns["id"]; table.PrimaryKey = PrimaryKeyColumns; DataSet dataSet = new DataSet(); dataSet.Tables.Add(table); for (int i = 0; i <= 100; i++) { row = table.NewRow(); row["id"] = i; row["ParentItem"] = "ParentItem " + i; table.Rows.Add(row); } DataSetSerializer(dataSet); DataSetSerializerCompression(dataSet); } } }
这里先把序列化及压缩的部分代码贴出来,明天贴解压及反序列化的代码。
下图是压缩和没压缩的文件大小对比,效果还明显吧
您还没有登录,请您登录后再发表评论
.net 将dataset json序列化和反序列化成dataset JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - ...
DataSet是.NET框架中的一个对象,它提供了一种在内存中管理关系数据的方式,可以看作是一个轻量级的数据库。DataSet包含DataTable,可以用来存储和操作表格数据,同时支持JOIN和关系等功能。 一、XML到DataSet的...
C# WebService返回数据四种方法(DataSet, 序列化的DataSet, Microsoft组件处理序列化DataSet, Microsoft组件处理序列化压缩DataSet)及动态调用WebService
这通常通过序列化过程实现。首先,使用`DataSet`的`GetXml()`方法将数据集内容转换为XML字符串,然后将该字符串转换为字节数组。以下代码展示了这一过程: ```csharp DataSet myDataSet = ...; // 初始化DataSet ...
然而,原始的DataSet序列化方式存在较大的数据冗余,尤其是在包含大量数据时,这不仅增加了传输负担,还降低了传输效率。通过对DataSet序列化的深入研究,我们可以发现其内部结构和序列化过程的细节,为进一步优化...
在示例中,可能需要将解压缩的字节数组反序列化回DataSet对象,以便进一步处理。 虽然.NET自带的GZipStream在一定程度上提高了性能,但相对于某些第三方压缩库,它的压缩比例可能不是最优的。如果需要更高的压缩...
在`描述`中提到的`DataSetSurrogate.dll`,这很可能是一个自定义的dll组件,它提供了专门针对DataSet对象的序列化和反序列化的功能,可能还包括压缩和解压缩的实现。通常,这样的组件会封装上述的压缩过程,使开发者...
"C#常用类库(100多个)"这个资源包涵盖了众多实用的编程领域,包括文件处理、网络通信、HTTP交互、多线程、UI控件、Office文档操作、输入/输出(I/O)操作、JSON序列化与反序列化、压缩与解压、文本处理、正则表达式...
- 将`DataSet`对象转换为`DataSetSurrogate`形式,并利用`BinaryFormatter`序列化到ZIP压缩流中。 - **代码示例**: ```csharp public byte[] DataSetToByte(DataSet dataSet) { MemoryStream ms = new ...
通信相关 1.C#HttpHelper,Httpwebrequest,... 序列化帮助类,Xml序列化,Json序列化,SoapFormatter序列化,BinaryFormatter序列化 27.压缩解压缩 SharpZip 28.验证码 YZMHelper Captcha 验证码类,一个很个性的验证码类
12. **System.Runtime.Serialization**: 提供序列化和反序列化功能,用于将对象状态保存到文件或网络,或者从这些来源恢复。 13. **System.Security**: 包含了加密、解密、认证和授权的相关类,如RSA、SHA、AES等...
6. **反序列化与还原**:接收到压缩的字节数组后,需要进行反序列化和解压缩以恢复原始的DataSet。在示例中,使用BinaryFormatter的Deserialize方法和Decompress辅助函数来完成这个过程。 7. **数据绑定**:最后,...
这些文件通常包含了关于库的元数据、文档说明或XML序列化信息,帮助开发者理解和使用库中的类和方法。 虽然提供的版本不是最新的V3.7.0,但ExcelDataReader的更新通常会带来性能优化、新功能的添加以及对不同Excel...
序列化帮助类,Xml序列化,Json序列化,SoapFormatter序列化,BinaryFormatter序列化 27.压缩解压缩 SharpZip 28.验证码 YZMHelper Captcha 验证码类,一个很个性的验证码类 29.页面辅助类 HTMLHelper ...
27.序列化 Serialize SerializeHelper 28.压缩解压缩 SharpZip 29.验证码 YZMHelper Captcha 验证码类,一个很个性的验证码类 30.页面辅助类 HTMLHelper UploadEventArgs JavaScriptPlus PageHelper 31.邮件 ...
7. 序列化和反序列化: - 使用BinaryFormatter和XmlSerializer可以将对象转换为字节流(保存到文件或网络传输),反之亦然,这在持久化对象状态或跨进程通信中很常见。 8. 文件路径处理: - Path类提供了许多静态...
- 数据序列化:了解如何序列化和反序列化对象到文件或内存。 6. 第十三章:设计模式与架构 - 设计模式:讲解单例、工厂、观察者、装饰器等常见设计模式。 - 面向接口编程:提倡使用接口而非具体类来设计软件。 ...
0780 如何序列化对象 473 0781 如何实现特殊形状的窗体 474 0782 如何移动正在使用的文件 474 0783 如何实现类似QQ的程序界面 475 0784 如何实现动画显示窗体 476 0785 如何显示和隐藏任务栏 477 0786 ...
相关推荐
.net 将dataset json序列化和反序列化成dataset JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - ...
DataSet是.NET框架中的一个对象,它提供了一种在内存中管理关系数据的方式,可以看作是一个轻量级的数据库。DataSet包含DataTable,可以用来存储和操作表格数据,同时支持JOIN和关系等功能。 一、XML到DataSet的...
C# WebService返回数据四种方法(DataSet, 序列化的DataSet, Microsoft组件处理序列化DataSet, Microsoft组件处理序列化压缩DataSet)及动态调用WebService
这通常通过序列化过程实现。首先,使用`DataSet`的`GetXml()`方法将数据集内容转换为XML字符串,然后将该字符串转换为字节数组。以下代码展示了这一过程: ```csharp DataSet myDataSet = ...; // 初始化DataSet ...
然而,原始的DataSet序列化方式存在较大的数据冗余,尤其是在包含大量数据时,这不仅增加了传输负担,还降低了传输效率。通过对DataSet序列化的深入研究,我们可以发现其内部结构和序列化过程的细节,为进一步优化...
在示例中,可能需要将解压缩的字节数组反序列化回DataSet对象,以便进一步处理。 虽然.NET自带的GZipStream在一定程度上提高了性能,但相对于某些第三方压缩库,它的压缩比例可能不是最优的。如果需要更高的压缩...
在`描述`中提到的`DataSetSurrogate.dll`,这很可能是一个自定义的dll组件,它提供了专门针对DataSet对象的序列化和反序列化的功能,可能还包括压缩和解压缩的实现。通常,这样的组件会封装上述的压缩过程,使开发者...
"C#常用类库(100多个)"这个资源包涵盖了众多实用的编程领域,包括文件处理、网络通信、HTTP交互、多线程、UI控件、Office文档操作、输入/输出(I/O)操作、JSON序列化与反序列化、压缩与解压、文本处理、正则表达式...
- 将`DataSet`对象转换为`DataSetSurrogate`形式,并利用`BinaryFormatter`序列化到ZIP压缩流中。 - **代码示例**: ```csharp public byte[] DataSetToByte(DataSet dataSet) { MemoryStream ms = new ...
通信相关 1.C#HttpHelper,Httpwebrequest,... 序列化帮助类,Xml序列化,Json序列化,SoapFormatter序列化,BinaryFormatter序列化 27.压缩解压缩 SharpZip 28.验证码 YZMHelper Captcha 验证码类,一个很个性的验证码类
12. **System.Runtime.Serialization**: 提供序列化和反序列化功能,用于将对象状态保存到文件或网络,或者从这些来源恢复。 13. **System.Security**: 包含了加密、解密、认证和授权的相关类,如RSA、SHA、AES等...
6. **反序列化与还原**:接收到压缩的字节数组后,需要进行反序列化和解压缩以恢复原始的DataSet。在示例中,使用BinaryFormatter的Deserialize方法和Decompress辅助函数来完成这个过程。 7. **数据绑定**:最后,...
这些文件通常包含了关于库的元数据、文档说明或XML序列化信息,帮助开发者理解和使用库中的类和方法。 虽然提供的版本不是最新的V3.7.0,但ExcelDataReader的更新通常会带来性能优化、新功能的添加以及对不同Excel...
序列化帮助类,Xml序列化,Json序列化,SoapFormatter序列化,BinaryFormatter序列化 27.压缩解压缩 SharpZip 28.验证码 YZMHelper Captcha 验证码类,一个很个性的验证码类 29.页面辅助类 HTMLHelper ...
27.序列化 Serialize SerializeHelper 28.压缩解压缩 SharpZip 29.验证码 YZMHelper Captcha 验证码类,一个很个性的验证码类 30.页面辅助类 HTMLHelper UploadEventArgs JavaScriptPlus PageHelper 31.邮件 ...
7. 序列化和反序列化: - 使用BinaryFormatter和XmlSerializer可以将对象转换为字节流(保存到文件或网络传输),反之亦然,这在持久化对象状态或跨进程通信中很常见。 8. 文件路径处理: - Path类提供了许多静态...
序列化帮助类,Xml序列化,Json序列化,SoapFormatter序列化,BinaryFormatter序列化 27.压缩解压缩 SharpZip 28.验证码 YZMHelper Captcha 验证码类,一个很个性的验证码类 29.页面辅助类 HTMLHelper ...
- 数据序列化:了解如何序列化和反序列化对象到文件或内存。 6. 第十三章:设计模式与架构 - 设计模式:讲解单例、工厂、观察者、装饰器等常见设计模式。 - 面向接口编程:提倡使用接口而非具体类来设计软件。 ...
0780 如何序列化对象 473 0781 如何实现特殊形状的窗体 474 0782 如何移动正在使用的文件 474 0783 如何实现类似QQ的程序界面 475 0784 如何实现动画显示窗体 476 0785 如何显示和隐藏任务栏 477 0786 ...