對象的二進制序列化很是有用,也很是方便。數組
咱們能夠把對象序列化爲字節數組,也能夠把對象序列化到文件,還能夠把對象序列化到文件並進行加密。 ide
先引用這些命名空間:加密
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Cryptography;
using System.Text;spa
序列化對象到字節數組:code
/// <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; }
序列化對象到文件:orm
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; } } } }