对象的二进制序列化非常有用,也非常方便。

我们可以把对象序列化为字节数组,也可以把对象序列化到文件,还可以把对象序列化到文件并进行加密。

先引用这些命名空间:

using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Cryptography;
using System.Text;

序列化对象到字节数组:

  1. /// <summary>
  2. /// 把对象序列化为字节数组
  3. /// </summary>
  4. public static byte[] SerializeObjectToBytes(object obj)
  5. {
  6. if (obj == null)
  7. return null;
  8. MemoryStream ms = new MemoryStream();
  9. BinaryFormatter formatter = new BinaryFormatter();
  10. formatter.Serialize(ms, obj);
  11. byte[] bytes = ms.ToArray();
  12. return bytes;
  13. }
  14.  
  15. /// <summary>
  16. /// 把字节数组反序列化成对象
  17. /// </summary>
  18. public static object DeserializeObjectFromBytes(byte[] bytes)
  19. {
  20. object obj = null;
  21. if (bytes == null)
  22. return obj;
  23. MemoryStream ms = new MemoryStream(bytes)
  24. {
  25. Position =
  26. };
  27. BinaryFormatter formatter = new BinaryFormatter();
  28. obj = formatter.Deserialize(ms);
  29. ms.Close();
  30. return obj;
  31. }

序列化对象到文件:

  1. public static void SerializeObjectToFile(string fileName, object obj)
  2. {
  3. using (FileStream fs = new FileStream(fileName, FileMode.Create))
  4. {
  5. BinaryFormatter formatter = new BinaryFormatter();
  6. formatter.Serialize(fs, obj);
  7. }
  8. }
  9.  
  10. /// <summary>
  11. /// 把文件反序列化成对象
  12. /// </summary>
  13. public static object DeserializeObjectFromFile(string fileName)
  14. {
  15. using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
  16. {
  17. BinaryFormatter formatter = new BinaryFormatter();
  18. object obj = formatter.Deserialize(fs);
  19. return obj;
  20. }
  21. }

序列化对象到文件,并进行 AES 加密:

  1. /// <summary>
  2. /// 把对象序列化到文件(AES加密)
  3. /// </summary>
  4. /// <param name="keyString">密钥(16位)</param>
  5. public static void SerializeObjectToFile(string fileName, object obj, string keyString)
  6. {
  7. using (AesCryptoServiceProvider crypt = new AesCryptoServiceProvider())
  8. {
  9. crypt.Key = Encoding.ASCII.GetBytes(keyString);
  10. crypt.IV = Encoding.ASCII.GetBytes(keyString);
  11. using (ICryptoTransform transform = crypt.CreateEncryptor())
  12. {
  13. FileStream fs = new FileStream(fileName, FileMode.Create);
  14. using (CryptoStream cs = new CryptoStream(fs, transform, CryptoStreamMode.Write))
  15. {
  16. BinaryFormatter formatter = new BinaryFormatter();
  17. formatter.Serialize(cs, obj);
  18. }
  19. }
  20. }
  21. }
  22.  
  23. /// <summary>
  24. /// 把文件反序列化成对象(AES加密)
  25. /// </summary>
  26. /// <param name="keyString">密钥(16位)</param>
  27. public static object DeserializeObjectFromFile(string fileName, string keyString)
  28. {
  29. using (AesCryptoServiceProvider crypt = new AesCryptoServiceProvider())
  30. {
  31. crypt.Key = Encoding.ASCII.GetBytes(keyString);
  32. crypt.IV = Encoding.ASCII.GetBytes(keyString);
  33. using (ICryptoTransform transform = crypt.CreateDecryptor())
  34. {
  35. FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
  36. using (CryptoStream cs = new CryptoStream(fs, transform, CryptoStreamMode.Read))
  37. {
  38. BinaryFormatter formatter = new BinaryFormatter();
  39. object obj = formatter.Deserialize(cs);
  40. return obj;
  41. }
  42. }
  43. }
  44. }

再谈 C# 对象二进制序列化,序列化并进行 AES 加密的更多相关文章

  1. 再谈js对象数据结构底层实现原理-object array map set

    如果有java基础的同学,可以回顾下<再谈Java数据结构—分析底层实现与应用注意事项>:java把内存分两种:一种是栈内存,另一种是堆内存.基本类型(即int,short,long,by ...

  2. 再谈Java数据结构—分析底层实现与应用注意事项

    在回顾js数据结构,写<再谈js对象数据结构底层实现原理-object array map set>系列的时候,在来整理下java的数据结构. java把内存分两种:一种是栈内存,另一种是 ...

  3. 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转

    线程安全使用(四)   这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...

  4. Java对象的serialVersion序列化和反序列化

    Java基础学习总结——Java对象的序列化和反序列化 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种 ...

  5. 为什么JAVA对象需要实现序列化?

    https://blog.csdn.net/yaomingyang/article/details/79321939 序列化是一种用来处理对象流的机制. 所谓对象流:就是将对象的内容进行流化.可以对流 ...

  6. 【Java技术专题】「性能优化系列」针对Java对象压缩及序列化技术的探索之路

    序列化和反序列化 序列化就是指把对象转换为字节码: 对象传递和保存时,保证对象的完整性和可传递性.把对象转换为有字节码,以便在网络上传输或保存在本地文件中: 反序列化就是指把字节码恢复为对象: 根据字 ...

  7. XmlSerializer 对象的Xml序列化和反序列化

    http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...

  8. Java对象的XML序列化(转)

    转自:http://westlifesz.javaeye.com/blog/48618 java.io.Serializable引发的问题——什么是序列化?在什么情况下将类序列化?  序列化就是一种用 ...

  9. [.net 面向对象程序设计进阶] (9) 序列化(Serialization) (一) 二进制流序列化

    [.net 面向对象程序设计进阶]  (9)  序列化(Serialization) (一) 二进制流序列化 本节导读: 在.NET编程中,经常面向对象处理完以后要转换成另一种格式传输或存储,这种将对 ...

随机推荐

  1. kubernets基础

    1.定义和功能. 1.1定义:kubernets解释为舵手或者飞行员,以Borg为主衍生出. 1.2功能:自动装箱,自我修复,水平扩展,服务发现和负载均衡,自动发布和回滚. 密钥和配置管理,存储编排, ...

  2. JAVA核心技术第一卷第三章

    JAVA中包含的数据类型:

  3. #254 Find the Longest Word in a String

    找出最长单词 在句子中找出最长的单词,并返回它的长度. 函数的返回值应该是一个数字. 当你完成不了挑战的时候,记得开大招'Read-Search-Ask'. 这是一些对你有帮助的资源: String. ...

  4. Python之旅Day13 JavaScript与DOM部分

    JavaScript部分 JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应的代码,浏览器就可以解释并做出相应的 ...

  5. codewars 题目笔记

    原题: Description: Bob is preparing to pass IQ test. The most frequent task in this test is to find ou ...

  6. Django项目配置日志

    LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': ...

  7. 第68节:Java中的MYSQL运用从小白到大牛

    第68节:Java中的MYSQL运用从小白到大牛 前言 学习java必备要求,学会运用!!! 常见关系化数据库 BootStrap是轻量级开发响应式页面的框架,全局css组件,js插件.栅格系统是将页 ...

  8. Spring Cloud Config采坑记

    1. Spring Cloud Config采坑记 1.1. 问题 在本地运行没问题,本地客户端服务能连上本地服务端服务,可一旦上线,发现本地连不上线上的服务 服务端添加security登录加密,客户 ...

  9. Mysql实现树形递归查询

    最近在做项目迁移,Oracle版本的迁到Mysql版本,遇到有些oracle的函数,mysql并没有,所以就只好想自定义函数或者找到替换函数的方法进行改造. Oracle递归查询 oracle实现递归 ...

  10. Zookeeper-watcher机制源码分析(一)

    Watcher的基本流程 ZooKeeper 的 Watcher 机制,总的来说可以分为三个过程:客户端注册 Watcher.服务器处理 Watcher 和客户端回调 Watcher 客户端注册wat ...