当前位置:
首页 > Python基础教程 >
-
C#教程之再谈 C# 对象二进制序列化,序列化并进
对象的二进制序列化非常有用,也非常方便。
我们可以把对象序列化为字节数组,也可以把对象序列化到文件,还可以把对象序列化到文件并进行加密。
先引用这些命名空间:
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Cryptography;
using System.Text;
序列化对象到字节数组:
/// <summary> /// 把对象序列化为字节数组 /// </summary> public static byte[] SerializeObjectToBytes(object obj) { if (obj == null) return null; MemoryStream ms = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms, obj); byte[] bytes = ms.ToArray(); return bytes; } /// <summary> /// 把字节数组反序列化成对象 /// </summary> public static object DeserializeObjectFromBytes(byte[] bytes) { object obj = null; if (bytes == null) return obj; MemoryStream ms = new MemoryStream(bytes) { Position = 0 }; BinaryFormatter formatter = new BinaryFormatter(); obj = formatter.Deserialize(ms); ms.Close(); return obj; }
序列化对象到文件:
public static void SerializeObjectToFile(string fileName, object obj) { using (FileStream fs = new FileStream(fileName, FileMode.Create)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(fs, obj); } } /// <summary> /// 把文件反序列化成对象 /// </summary> public static object DeserializeObjectFromFile(string fileName) { using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) { BinaryFormatter formatter = new BinaryFormatter(); object obj = formatter.Deserialize(fs); return obj; } }
序列化对象到文件,并进行 AES 加密:
/// <summary> /// 把对象序列化到文件(AES加密) /// </summary> /// <param name="keyString">密钥(16位)</param> public static void SerializeObjectToFile(string fileName, object obj, string keyString) { using (AesCryptoServiceProvider crypt = new AesCryptoServiceProvider()) { crypt.Key = Encoding.ASCII.GetBytes(keyString); crypt.IV = Encoding.ASCII.GetBytes(keyString); using (ICryptoTransform transform = crypt.CreateEncryptor()) { FileStream fs = new FileStream(fileName, FileMode.Create); using (CryptoStream cs = new CryptoStream(fs, transform, CryptoStreamMode.Write)) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(cs, obj); } } } } /// <summary> /// 把文件反序列化成对象(AES加密) /// </summary> /// <param name="keyString">密钥(16位)</param> public static object DeserializeObjectFromFile(string fileName, string keyString) { using (AesCryptoServiceProvider crypt = new AesCryptoServiceProvider()) { crypt.Key = Encoding.ASCII.GetBytes(keyString); crypt.IV = Encoding.ASCII.GetBytes(keyString); using (ICryptoTransform transform = crypt.CreateDecryptor()) { FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); using (CryptoStream cs = new CryptoStream(fs, transform, CryptoStreamMode.Read)) { BinaryFormatter formatter = new BinaryFormatter(); object obj = formatter.Deserialize(cs); return obj; } } } }
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式