C#序列化/反序列化对象.将对象写入文件,从文件读取对象.
C#序列化/反序列化对象.将对象写入文件,从文件读取对象.
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.IO.Compression;
using System.Windows.Forms;
namespace Vjsdn_Tester
{
public class TestZipObject
{
/// <summary>
/// 测试简单序列化/反序列化对象
/// </summary>
public void Test()
{
SerilizabledObject obj = new SerilizabledObject();
byte[] bs = ZipObject.CompressionObject(obj);
object o = ZipObject.DecompressionObject(bs); //还原,ok
MessageBox.Show((o as SerilizabledObject).getName());
}
/// <summary>
/// 序列化对象,将对象写入文件,然后还原.
/// </summary>
public void TestReadWriteFile()
{
SerilizabledObject obj = new SerilizabledObject();
byte[] bs = ZipObject.CompressionObject(obj);
//将数组写入文件
Stream writer = new FileStream("E:\\test.shape", FileMode.Create, FileAccess.Write, FileShare.Write);
writer.Write(bs, 0, bs.Length);
writer.Flush();
writer.Close();
//读取文件,先写入数组,再从数组转换为对象.Easy!
FileStream fs = File.Open("E:\\test.shape", FileMode.Open);
byte[] bss = new byte[fs.Length];
int i = fs.Read(bss, 0, (int)fs.Length);
object o = ZipObject.DecompressionObject(bss); //还原,ok
MessageBox.Show((o as SerilizabledObject).getName());
}
}
/// <summary>
/// 测试用对象
/// </summary>
[Serializable]
public class SerilizabledObject
{
string id = "id001";
string name = "www.vjsdn.com";
public SerilizabledObject() { }
public string getName()
{
return this.name;
}
}
/// <summary>
/// 压缩解压object
/// </summary>
public class ZipObject
{
#region 压缩解压object
public static byte[] CompressionObject(object DataOriginal)
{
if (DataOriginal == null) return null;
BinaryFormatter bFormatter = new BinaryFormatter();
MemoryStream mStream = new MemoryStream();
bFormatter.Serialize(mStream, DataOriginal);
byte[] bytes = mStream.ToArray();
MemoryStream oStream = new MemoryStream();
DeflateStream zipStream = new DeflateStream(oStream, CompressionMode.Compress);
zipStream.Write(bytes, 0, bytes.Length);
zipStream.Flush();
zipStream.Close();
return oStream.ToArray();
}
public static object DecompressionObject(byte[] bytes)
{
if (bytes == null) return null;
MemoryStream mStream = new MemoryStream(bytes);
mStream.Seek(0, SeekOrigin.Begin);
DeflateStream unZipStream = new DeflateStream(mStream, CompressionMode.Decompress, true);
object dsResult = null;
BinaryFormatter bFormatter = new BinaryFormatter();
dsResult = (object)bFormatter.Deserialize(unZipStream);
return dsResult;
}
#endregion
}
}
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.IO.Compression;
using System.Windows.Forms;
namespace Vjsdn_Tester
{
public class TestZipObject
{
/// <summary>
/// 测试简单序列化/反序列化对象
/// </summary>
public void Test()
{
SerilizabledObject obj = new SerilizabledObject();
byte[] bs = ZipObject.CompressionObject(obj);
object o = ZipObject.DecompressionObject(bs); //还原,ok
MessageBox.Show((o as SerilizabledObject).getName());
}
/// <summary>
/// 序列化对象,将对象写入文件,然后还原.
/// </summary>
public void TestReadWriteFile()
{
SerilizabledObject obj = new SerilizabledObject();
byte[] bs = ZipObject.CompressionObject(obj);
//将数组写入文件
Stream writer = new FileStream("E:\\test.shape", FileMode.Create, FileAccess.Write, FileShare.Write);
writer.Write(bs, 0, bs.Length);
writer.Flush();
writer.Close();
//读取文件,先写入数组,再从数组转换为对象.Easy!
FileStream fs = File.Open("E:\\test.shape", FileMode.Open);
byte[] bss = new byte[fs.Length];
int i = fs.Read(bss, 0, (int)fs.Length);
object o = ZipObject.DecompressionObject(bss); //还原,ok
MessageBox.Show((o as SerilizabledObject).getName());
}
}
/// <summary>
/// 测试用对象
/// </summary>
[Serializable]
public class SerilizabledObject
{
string id = "id001";
string name = "www.vjsdn.com";
public SerilizabledObject() { }
public string getName()
{
return this.name;
}
}
/// <summary>
/// 压缩解压object
/// </summary>
public class ZipObject
{
#region 压缩解压object
public static byte[] CompressionObject(object DataOriginal)
{
if (DataOriginal == null) return null;
BinaryFormatter bFormatter = new BinaryFormatter();
MemoryStream mStream = new MemoryStream();
bFormatter.Serialize(mStream, DataOriginal);
byte[] bytes = mStream.ToArray();
MemoryStream oStream = new MemoryStream();
DeflateStream zipStream = new DeflateStream(oStream, CompressionMode.Compress);
zipStream.Write(bytes, 0, bytes.Length);
zipStream.Flush();
zipStream.Close();
return oStream.ToArray();
}
public static object DecompressionObject(byte[] bytes)
{
if (bytes == null) return null;
MemoryStream mStream = new MemoryStream(bytes);
mStream.Seek(0, SeekOrigin.Begin);
DeflateStream unZipStream = new DeflateStream(mStream, CompressionMode.Decompress, true);
object dsResult = null;
BinaryFormatter bFormatter = new BinaryFormatter();
dsResult = (object)bFormatter.Deserialize(unZipStream);
return dsResult;
}
#endregion
}
}
测试代码:
private void button7_Click(object sender, EventArgs e)
{
new TestZipObject().Test(); // 测试简单序列化/反序列化对象
new TestZipObject().TestReadWriteFile(); // 序列化对象,将对象写入文件,然后还原.
}
{
new TestZipObject().Test(); // 测试简单序列化/反序列化对象
new TestZipObject().TestReadWriteFile(); // 序列化对象,将对象写入文件,然后还原.
}
参考文档:
CSFramework.AutoUpgrader 发布命令升级包出错:InvalidOperationException使用 XmlInclude 或 SoapInclude 特性静态指定非已知的类型
[原创]C# UDP穿越NAT,UDP打洞,UDP Hole Punching源代码(2)
读取XML 数据时,超出最大数组长度配额(16384),MaxArrayLength 属性
创建SoapClient对象几个常见错误提示及解决方案
C# .NET 入门概念与知识点总结|C/S开发框架
CSFramework.WebApi客户端请求流程图|C/S开发框架
C#使用Graphics合成二维码和头像的分享图(小程序分享、App分享)-C/S开发框架
GoF设计模式:原型模式(Prototype Pattern)—对象的克隆-C/S开发框架
C#.NET学习路线导引-C/S开发框架
C#使用Newtonsoft.Json.dll解析Json数据-C/S开发框架
C# C/S架构软件自动升级程序Winform+多数据库(MySQL,MsSQL,Oracle)-C/S开发框架
DataSetExtension - C# DataSet对象持久化到本地文件
C# C/S架构软件自动升级程序Winform+多数据库(MySQL,MsSQL,Oracle)
C#源代码安全缺陷与提高源代码质量解决方案
WebApi开发框架:使用HttpGet方式调用WebAPI接口
什么是ASP.NET WebApi控制器(APIController)?
CSFramework.AutoUpgrader 发布命令升级包出错:InvalidOperationException使用 XmlInclude 或 SoapInclude 特性静态指定非已知的类型
[原创]C# UDP穿越NAT,UDP打洞,UDP Hole Punching源代码(2)
读取XML 数据时,超出最大数组长度配额(16384),MaxArrayLength 属性
创建SoapClient对象几个常见错误提示及解决方案
C# .NET 入门概念与知识点总结|C/S开发框架
CSFramework.WebApi客户端请求流程图|C/S开发框架
C#使用Graphics合成二维码和头像的分享图(小程序分享、App分享)-C/S开发框架
GoF设计模式:原型模式(Prototype Pattern)—对象的克隆-C/S开发框架
C#.NET学习路线导引-C/S开发框架
C#使用Newtonsoft.Json.dll解析Json数据-C/S开发框架
C# C/S架构软件自动升级程序Winform+多数据库(MySQL,MsSQL,Oracle)-C/S开发框架
DataSetExtension - C# DataSet对象持久化到本地文件
C# C/S架构软件自动升级程序Winform+多数据库(MySQL,MsSQL,Oracle)
C#源代码安全缺陷与提高源代码质量解决方案
WebApi开发框架:使用HttpGet方式调用WebAPI接口
什么是ASP.NET WebApi控制器(APIController)?
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
