序列化:又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方。

一般有三种方式:1、是使用BinaryFormatter进行串行化二进制序列化;2、使用XmlSerializer进行串行化的XML序列化;3、使用SOAP协议进行序列化。这里先总结二进制序列化。

命名空间:System.Runtime.Serialization.Formatters.Binary;

System.IO;

1).先建一个可序列化的类

[Serializable]     
    class Person
    {
    private string name;
    public string Name
    { get { return name; }
        set { name = value; }
    }

[NonSerialized]   //age这个字段不序列化
    private int age;
    public int Age
    {
        get { return age; }
        set { age = value; }
    }
    public Person() { }
    public Person(string name ,int age) {
        this.name = name;
        this.age = age;
    }

public void say() {
        Console.WriteLine("hello,my name is{0} ,I am {1}years old.",name,age);
    } }

Main函数里:

List<Person> persons = new List<Person>();//或者 Person p=new Person("chen",24);
            Person p1 = new Person("chen",24);
            Person p2 = new Person("li", 23);
            persons.Add(p1);
            persons.Add(p2);

xuliehua(persons); //调用静态序列化方法
            fanxuliehua();       //调用静态反序列化方法

public static void xuliehua(List<Person> persons)//序列化方法
        {
            FileStream fs = new FileStream("Person.bin", FileMode.Create);//创建一个文件流,对文件进行写入
            BinaryFormatter bf = new BinaryFormatter();//使用CLR二进制格式器
            bf.Serialize(fs,persons); //序列化到硬盘

fs.Close();//关闭文件流
        }

public static void fanxuliehua()//反序列化方法

{

FileStream fs = new FileStream("Person.bin", FileMode.Open);//打开流文件
            BinaryFormatter bf = new BinaryFormatter();
            List<Person> persons = bf.Deserialize(fs) as List<Person>;//从硬盘反序列化

//或  Person p=(Person)bf.Deserialize(fs); 对应上面的或者

fs.Close();//关闭文件流
            for (int i = 0; i < persons.Count;i++ )
            {
                persons[i].say();
            }
        }

结果:hello,my name is chen ,I am 0years old.

hello,my name is li ,I am 0years old.//name 序列化过,而 age没有序列化,所以为0.

注意:继承时,父类与子类都需要序列化。

C# 序列化之二进制的更多相关文章

  1. java编解码技术,json序列化与二进制序列化

    1.何为json序列化与二进制序列化 通常我们在程序中采用的以json为传输,将json转为对象的就是json序列化了.而二进制序列化通常是我们将数据转换为二进制进行传输,然后在进行各类转换操作 2. ...

  2. IOSerialize,xml和json,soap序列化器,二进制序列化器,XML序列化器,文件 检查、新增、复制、移动、删除

    1 文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/读取配置文件3 三种序列化器4 xml和json1.文件夹/文件 检查.新增.复制.移动.删除,2 文件读写,记录文本日志/ ...

  3. java序列化,二进制和数据流

    类的序列化需要支持Serializable接口,如果类支持序列化,可以通过ObjectOutPutStream和ObjectInputStream将对象和Stream之间进行方便的转换. 首先来 看一 ...

  4. C#对象序列化与反序列化zz

      C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍........................ ...

  5. .NET中XML序列化的总结

    [题外话] 以前虽然常用.NET中的序列化,但是常用的BinaryFormatter,也就是二进制文件的序列化,却鲜用XML的序列化.对于XML序列化,.NET中同样提供了一个非常方便的工具XmlSe ...

  6. .Net组件程序设计之序列化

     .Net组件程序设计之序列化 自动序列化 本篇给大家讲解一下在.NET中的序列化,它的用处非常之多,特别是对于某种环境下保存某种状态是很好的方法,接下来就来看一下吧. Serializable属性 ...

  7. C#对象序列化与反序列化

    C#对象序列化与反序列化(转载自:http://www.cnblogs.com/LiZhiW/p/3622365.html) 1. 对象序列化的介绍.......................... ...

  8. .NET序列化的一点技巧(附Demo)

    阅读目录 介绍 详细 处理 结论 Demo下载 介绍 序列化是将对象状态转换为可保持或传输的形式的过程.序列化的补集是反序列化,后者将流转换为对象.这两个过程一起保证数据易于存储和传输. .NET F ...

  9. .net中对象序列化技术浅谈

    .net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储 ...

随机推荐

  1. 计算机视觉基本原理——RANSAC

    公众号[视觉IMAX]第31篇原创文章 一 前言 对于上一篇文章——一分钟详解「本质矩阵」推导过程中,如何稳健地估计本质矩阵或者基本矩阵呢?正是这篇文章重点介绍的内容. 基本矩阵求解方法主要有: 1) ...

  2. mongodb的增加和删除

    一  mongodb中使用insert()方法来增加集合中的文档: db.myTable.insert({name:'arvin',age:12}) //对名为myTable的集合插入数据 插入数据 ...

  3. [noip模拟]心<并查集>

    背景描述: 不是一切深渊都是灭亡 不是一切灭亡都覆盖在弱者的头上 ——<这也是一切> 舒婷 有N个透明的盒子, 每个盒子里面有两个不同颜色的球, 总共有M种颜色. Alice和Bob又在玩 ...

  4. Redis对象——哈希(Hash)

    哈希在很多编程语言中都有着很广泛的应用,而在Redis中也是如此,在redis中,哈希类型是指Redis键值对中的值本身又是一个键值对结构,形如value=[{field1,value1},...{f ...

  5. yum-程序包管理器前端工具

    一.要想使用yum先要指定yum源 /etc/yum.com /etc/yum.repos.d/*repo 一.yum的使用 yum [option] command  包名 option -y: c ...

  6. 利用data文件恢复MySQL数据库

    背景:测试服务器 MySQL 数据库不知何种原因宕机,且无法启动,而原先的数据库并没有备份,重新搭建一个新服务器把原data 复制出来 进行恢复 1 尽量把原data复制出来(一个都不要少以防意外 其 ...

  7. 使用Pytorch在多GPU下保存和加载训练模型参数遇到的问题

    最近使用Pytorch在学习一个深度学习项目,在模型保存和加载过程中遇到了问题,最终通过在网卡查找资料得已解决,故以此记之,以备忘却. 首先,是在使用多GPU进行模型训练的过程中,在保存模型参数时,应 ...

  8. Redis 练习(二)

    需求: 为购物网站实现登录状态及浏览记录的维护 进入时检查 token 是否已登录 每次进入更新 token 最新进入时间 记录用户浏览的商品信息(最多 25 个) 定时检查 token 数量,如果超 ...

  9. 手把手教你分析Mysql死锁问题

    前言 前几天跟一位朋友分析了一个死锁问题,所以有了这篇图文详细的博文,哈哈~ 发生死锁了,如何排查和解决呢?本文将跟你一起探讨这个问题 准备好数据环境 模拟死锁案发 分析死锁日志 分析死锁结果 环境准 ...

  10. hicharts中treemap添加超链接

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...