介绍

对象序列化是将对象转换为二进制数据(字节流),反序列化是将二进制数据还原成对象。对象的非持久态的,不仅在程序重启、操作系统重启会造成对象的丢失,就是退出函数范围等都可能造成对象的消失,而序列化与反序列化就是为了完成对象的持久化。

使用

新建可序列化的实体类:

[Serializable] // 该特性标记该类可序列化
public class Person
{
    private int id;

    private string name;

    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public override string ToString()
    {
        return string.Format("Id: {0}, Name: {1}", id, name);
    }
}

序列化

var person = new Person();
person.Id = ;
person.Name = "张三";
// 初始化序列化工具类对象
BinaryFormatter binaryFormatter = new BinaryFormatter();
FileStream fs = File.OpenWrite("D:/data"); // 获取一个输出流对象
binaryFormatter.Serialize(fs,person); // 执行序列化fs.Close();

反序列化

// 初始化序列化工具类对象
BinaryFormatter binaryFormatter = new BinaryFormatter();
FileStream fs = File.OpenRead("D:/data"); // 获取一个输入流对象
var obj = binaryFormatter.Deserialize(fs);
Console.WriteLine(obj); // Id: 1, Name: 张三fs.Close();

注意事项

  • 序列化类必须标注上 [Serializable] 特性。
  • 序列化类的父类也必须标注上 [Serializable] 特性。
  • 序列化类的所有成员的类型也必须标注上 [Serializable] 特性。
  • 序列化只会对类中的字段序列化,只能序列化一些状态信息。
  • 类结构修改后那么之前序列化的内容尽量不要再用了,否则可能出错。

C#基础加强(9)之对象序列化(二进制)的更多相关文章

  1. JAVA基础知识之IO——对象序列化

    对象序列化 Java对象序列化(Serialize)是指将Java对象写入IO流,反序列化(Deserilize)则是从IO流中恢复该Java对象. 对象序列化将程序运行时内存中的对象以字节码的方式保 ...

  2. Java基础学习总结——Java对象的序列化和反序列化

    一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...

  3. JAVA基础学习day22--IO流四-对象序列化、管道流、RandomAccessFile、DataStream、ByteArrayStream、转换流的字符编码

    一.对象序列化 1.1.对象序列化 被操作的对象需要实现Serializable接口 1.2.对象序列化流ObjectOutputStream与ObjectInputStream ObjectInpu ...

  4. Java基础学习总结--Java对象的序列化和反序列化

    一.序列化和反序列化的概念 把对象转换成字节序列的过程称之为对象的序列化 把字节序列恢复为对象的过程称之为对象的反序列化 对象序列化的主要用途: 1)把对象的字节序列永久的保存到硬盘上,通常放在一个文 ...

  5. #python基础学习模块:marshal 对象的序列化

    #标准库地址:https://docs.python.org/2/library/marshal.html"""有时候,要把内存中一个对象持久化保存磁盘或者序列化二进制流 ...

  6. Java基础之对象序列化

    1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现 ...

  7. Java基础(二十九)Java IO(6)对象序列化(Object Serialization)

    参考之前整理过的Java序列化与反序列化:https://www.cnblogs.com/BigJunOba/p/9127414.html 使用对象输入输出流可以实现对象序列化与反序列化,可以直接存取 ...

  8. Java基础IO类之对象流与序列化

    对象流的两个类: ObjectOutputStream:将Java对象的基本数据类型和图形写入OutputStream ObjectInputStream:对以前使用ObjectOutputStrea ...

  9. C#[Serializable]在C#中的作用-NET 中的对象序列化

    为什么要使用序列化?最重要的两个原因是:将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本:按值将对象从一个应用程序域发送至另一个应用程序域.例如,序列化可用于在 ASP.NET 中保 ...

随机推荐

  1. jsp 异步处理

    一.  概述 异步处理功能可以节约容器线程.你应该将此功能 使用在长时间运行的操作上.此功能的作用是释放正在 等待完成的线程,使该线程能够被另一请求所使用. 二. 编写异步Servlet和过滤器 We ...

  2. css中的宽度

    浏览器通过CSS对元素的盒子模型的描述进行页面渲染的.因此,元素的宽度受到父元素.css描述的影响. 通常,元素的宽度是指盒子模型中content-box所占用的宽度.也就是说,默认box-sizin ...

  3. Java 模拟http请求

    package ln; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRea ...

  4. vs调试的时候,指定的参数已超出有效值的范围。参数名:sit ,先仔细看看错误和我的一样不一样

    https://www.cnblogs.com/pei123/p/7694947.html 指定的参数已超出有效值的范围.参数名:sit ,先仔细看看错误和我的一样不一样 更新了1709就这样了,的确 ...

  5. [C#.Net]全局钩子实现USB扫码枪无焦点状态下扫入

    https://www.cnblogs.com/masonlu/p/10105135.html

  6. .net core 2.x - 日志 - to elasticsearch - (2)

    你可能会有疑惑,怎么又来一偏,,,其实我也好奇,因为我已经忘记哪个能跑起来了,,,记忆中,这个好像是没问题的. 1.使用到的资源 关于es(elasticseach)在.net中的访问,可以参考es的 ...

  7. 你好!酷痞 Coolpy

    欢迎你进入酷痞的物联网世界.这里有着自由的空气和自然的气息.接下来我将告诉你如果一步步建立一个自己专属的物联网平台. 由于目前的酷痞的官方域名还没有通过备案所以现在用临时域名解说本说明. 最终酷痞的官 ...

  8. 2017-10-22—光电二极管

    光通信基本每天都会接触光电二极管,光模块说简单点就是电光转换和光电转换. 光传输模块在整体产品架构上则包括光学次模块(Optical Subassembly;OSA)及电子次模块(Electrical ...

  9. C++ 简单的控制台贪吃蛇小游戏

    由于比较懒,所以不怎么写,觉得这样不应该.我应该对自己学的做出整理,不管是高端低端,写出来是自己的. // 贪吃蛇.cpp : 定义控制台应用程序的入口点. // #include "std ...

  10. css样式的六种选择器

    css常用的选择器有: 1.标签选择器: 标签选择器,这种选择器影响范围大,建议尽量应用在层级选择器中. 如: *{margin:0;padding:0}   /* 影响所有的标签 */ div{co ...