基于二进制数据流的序列化和反序列化

        /// <summary>/// 序列化/// </summary>/// <typeparam name="T"></typeparam>/// <param name="obj"></param>public static void Serialize<T>(T obj){try{using (FileStream fs = new FileStream("Serialize.bin", FileMode.OpenOrCreate)){BinaryFormatter bf = new BinaryFormatter();bf.Serialize(fs, obj);//序列化}}catch (Exception ex){throw;}}/// <summary>/// /// </summary>/// <typeparam name="T"></typeparam>/// <returns></returns>public static T Deserialize<T>(){T res = default(T);try{using (FileStream fs=new FileStream("Serialize.bin",FileMode.Open)){BinaryFormatter bf = new BinaryFormatter();res = (T)bf.Deserialize(fs);}}catch (Exception){throw;}return res;}

此时需要序列化的对象必须要声明为可序列化,只需要在声明类的同时采用关键字Serializable,如下:

1

2

3

4

5

6

[Serializable]

public class Test

{

    public string Name { getset; }

    public int Age { getset; }

}

  以上便可以完成序列化的反序列化的操作。

基于二进制序列化的反序列化的拷贝,C#是基于面型对象的开发语言,自定义声明的类都是采用引用传递的形式,有时候数据的修改对于这种引用传递来说并不是我们想要的结果,因此我们需要该对象的一份拷贝。

以下是基于内存序列化的一种方式:

   public static T Copy<T>(T obj){if (obj == null){return default(T);}T res = default(T);using (MemoryStream ms = new MemoryStream()){BinaryFormatter bf = new BinaryFormatter();bf.Serialize(ms, obj);//序列化ms.Seek(0, SeekOrigin.Begin);res = (T)bf.Deserialize(ms);//反序列化}return res;}

这样获取到的拷贝对象跟原来的对象就不是指向同一个地址,这样操作新的对象也不会影响原来的对象。

还有一种是实现ICloneable接口,在Clone方法中返回对象的一个浅拷贝MemberwiseClone。

 public class CopyTest : ICloneable{public string Name { get; set; }public int Age { get; set; }public object Clone(){return this.MemberwiseClone();//获取副本}}

通过以下方式便可以获得对象的一个拷贝对象:

CopyTest ct = new CopyTest() { Name = "Test", Age = 99 };
CopyTest ct01 = (CopyTest)ct.Clone();

C#序列化与反序列化以及深拷贝浅拷贝方法相关推荐

  1. Json数据的序列化与反序列化的三种常用方法介绍

    以下内容是本作者从官网中看相应的教程后所做的demo,其体现了作者对相关知识点的个人理解..作者才疏学浅,难免会有理解不到位的地方..还请各位读者批判性对待...       本文主要介绍在Json数 ...

  2. .Net序列化与反序列化的2种方法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  3. C#中JSON序列化和反序列化

    有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境-- 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...

  4. java-Transient关键字、Volatile关键字介绍和序列化、反序列化机制、单例类序列化

    - Transient关键字 Java的serialization提供了一种持久化对象实例的机制.当持久化对象时,可能有一个特殊的对象数据成员,我们不想  用serialization机制来保存它.为 ...

  5. Go进阶(7): JSON 序列化和反序列化

    1. json序列化和反序列化基础 json数据的序列化和反序列化是一种非常常见的方式,尤其是在http/rcp的微服务调试中. 基础语法 在 Go 中我们主要使用官方的 encoding/json  ...

  6. 反序列化 对象 java_Java IO详解(六)------序列化与反序列化(对象流)

    1.什么是序列化与反序列化? 序列化:指把堆内存中的 Java 对象数据,通过某种方式把对象存储到磁盘文件中或者传递给其他网络节点(在网络上传输).这个过程称为序列化.通俗来说就是将数据结构或对象转换 ...

  7. Java序列化和反序列化(详解)

    一.理解Java序列化和反序列化 Serialization(序列化):将java对象以一连串的字节保存在磁盘文件中的过程,也可以说是保存java对象状态的过程.序列化可以将数据永久保存在磁盘上(通常 ...

  8. Java 序列化和反序列化详解完整版

    目录 一.序列化 1.1.Serialization(序列化): 1.2.deserialization(反序列化) 二.序列化和反序列化的应用 java序列化的优点: 三.序列化和反序列化地实现 3 ...

  9. java深拷贝和浅拷贝_Java 深拷贝浅拷贝 与 序列化

    一.浅拷贝.深拷贝 浅拷贝会对对象中的成员变量进行拷贝:如果是基本类型,拷贝的就是基本类型的值:如果属性是内存地址(引用类型),拷贝的就是内存地址 : 深拷贝,除了基本类型外,引用类型所引用的对象也会 ...

最新文章

  1. editplus 3 注册码
  2. 剑指Offer_17_树的子结构
  3. BugkuCTF解题报告---WEB
  4. C++ 变量判定的螺旋法则
  5. mongoDB如何将数据导成csv文件?
  6. python画精美图案_Python语言的魅力------完美图案
  7. TensorFlow HOWTO 1.4 Softmax 回归
  8. c语言图像压缩算法实现_kakadu——JPEG2000图像压缩软件的安装和使用
  9. oracle归档日志太多(ORA-00257: archiver error. Connect internal only, until freed)错误的处理方法
  10. python自动化写作_50行代码让python自动生成文章
  11. MATLAB说文本命令超过,MATLAB基础
  12. 哪些英语用法是普通中国学生最生疏的?
  13. XSS labs 闯关大合集
  14. ALIGN:自动化模拟布局的系统
  15. Caffe 理解blob之SyncedMen类同步CPU和GPU
  16. 爪哇国新游记之五----继承与接口
  17. spi sync async
  18. 单页面应用(SPA)前端路由hash 模式 VS history 模式
  19. 汉字转化成拼音 汉字转化成拼音
  20. “笨办法”学Python3,Zed A. Shaw, 习题4~5

热门文章

  1. linux修改密码提示unix,linux中普通用户批改密码出现(passwd:Authentication token manipulation error)...
  2. python闯关_99题--Python闯关
  3. ediplus 复制编辑一列_EditPlus等编辑器选中列(块)的方法
  4. java注解传递value_spring中@value注解需要注意的问题
  5. webpack 合并压缩_webpack的运用
  6. 火箭技术术语_多物理场仿真优化火箭发动机增材制造工艺
  7. 大学生拍照搜题_大学生心理健康教育知识,请问:这个考试有没有找答案软件?...
  8. nginx php实例,多个mysql,nginx,php实例环境安装zabbix(完全自定义)
  9. 堆叠柱形图上自定义数字_用Excel绘制Cell上的漂亮配图
  10. 工作多年,怀才不遇你该怎么办?