C# 序列化之二进制
序列化:又称串行化,是.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.
注意:继承时,父类与子类都需要序列化。
转载于:https://www.cnblogs.com/anyihen/p/5506988.html
C# 序列化之二进制相关推荐
- C#中使用ProtoBuf提高序列化速度对比二进制序列化
场景 ProtoBuf protocolbuffer是google 的一种数据交换的格式,它独立于语言,独立于平台. google 提供了多种语言的实现:java.c#.c++.go 和 python ...
- C#中使用二进制和ProtoBuf分别进行序列化、反序列化、压缩、解压缩对比测试汇总
场景 生成工具ProtoGen下载: https://download.csdn.net/download/badao_liumang_qizhi/11583806 protobuf-net.dll下 ...
- 如何使用字节序列化双精度数组(二进制增量编码,用于低差单调浮点数据集)...
低延迟系统需要高性能的消息处理和传递. 由于在大多数情况下,数据必须通过有线传输或进行序列化才能保持持久性,因此编码和解码消息已成为处理管道的重要组成部分. 高性能数据编码的最佳结果通常涉及应用程序数 ...
- C# 二进制BinaryFormatter进行序列化与反序列化
原文链接:https://blog.csdn.net/e295166319/article/details/52790131 序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其 ...
- 不同命名空间的对象二进制反序列化问题
本质上说,这并不是二进制序列化的问题,甚至不关序列化的问题. 你想要的是在两个内部结构一致但在不同命名空间(甚至不同项目)的同名类间做类型转换. 这个问题很常见,因为实际工作中经常会有此类需求,但是我 ...
- C# 的三种序列化方法
序列化是将一个对象转换成字节流以达到将其长期保存在内存.数据库或文件中的处理过程.它的主要目的是保存对象的状态以便以后需要的时候使用.与其相反的过程叫做反序列化. 序列化一个对象 为了序列化一个对象, ...
- Java学习总结:51(对象序列化)
对象序列化 对象序列化的本质实际上就是将内存中所保存的对象数据转换为二进制数据流进行传输的操作. 但并不是所有类的对象都可以直接进行序列化操作,要被序列化的对象所在的类一定要实现java.io.Ser ...
- 一文了解Python常见的序列化操作
关于我 编程界的一名小小程序猿,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. 联系:hylinux1024@gmail ...
- java 序列化慢_java原生序列化慢在哪里?
Java原生序列化和二进制序列化性能比较 序列化速度 package com.clq.netty.serializable; import java.io.ByteArrayOutputStream; ...
最新文章
- 微软每年豪砸安全研发 10 亿美元,聊聊背后的技术密码
- UA OPTI570 量子力学17 创生算符与湮灭算符
- Linux CentOS下配置SVN+SVN勾子
- IdentityServer4【Introduction】之支持的规范
- ios html清除缓存图片,iOS,如何清理缓存的图片
- oracle查看锁表进程,杀掉锁表进程
- 2017.5.18-24 基站选址 失败总结
- Anaconda安装后找不到conda.exe
- webstorm破解
- 淘宝客升级助手V1.0 等级升级获取高级账户,淘客适用高佣金破解版
- 设计分享 | 基于51单片机理解SG90舵机原理并用按键控制
- 怎样将图片变成圆形?教你裁剪图片的方法
- 微信对话框删除后怎么找回聊天记录?
- ORACLE存储过程中打印所有表数据的方法
- 工作中整理了一份身份证户籍地数据库,现将生成的脚本共享,欢迎使用、升级、修正
- 恢复Excel批注框到默认位置
- CSS3 matrix矩阵
- c语言中箭头的作用,为什么C中的箭头(-)运算符存在?
- 自适应网页ios失效
- iOS开发,tableView在Grouped样式下,表头表尾空白问题解决