-
C#教程之C#教程之再谈 C# 对象二进制序列化,序列化并进
本站最新发布 C#从入门到精通
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
试听地址 https://www.xin3721.com/eschool/CSharpxin3721/
对象的二进制序列化非常有用,也非常方便。
我们可以把对象序列化为字节数组,也可以把对象序列化到文件,还可以把对象序列化到文件并进行加密。
先引用这些命名空间:
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; } } } }
栏目列表
最新更新
如何使用OS模块中的stat方法
Python os 模块
seek() 方法
python打开文件实例1
Python写入文件
什么是流?
文件操作如何进制逐行读取
Python相对路径
with创建临时运行环境
Python文件操作
.Net Standard(.Net Core)实现获取配置信息
Linux PXE + Kickstart 自动装机
Shell 编程 基础
Shell 编程 条件语句
CentOS8-网卡配置及详解
Linux中LVM逻辑卷管理
1.数码相框-相框框架分析(1)
Ubuntu armhf 版本国内源
Linux中raid磁盘阵列
搭建简易网站
access教程之Access简介
mysql 安装了最新版本8.x版本后的报错:
Mysql空间数据&空间索引(spatial)
如何远程连接SQL Server数据库的图文教程
复制SqlServer数据库的方法
搜索sql语句
sql中返回参数的值
sql中生成查询的模糊匹配字符串
数据定义功能
数据操作功能