二进制流序列化(反序列化)和XML序列化(反序列化)
序列化(Serialization):序列化是将对象状态转换为可保存或传输的其它数据格式的过程。
反序列化(Deserialization) :与序列化相对的是反序列化,将其它数据格式转换为对象的过程。
作用:将对象中的数据转换成其它文件,方便信息的存储与交换。
.NET框架提供了三种序列化的方式:
1、使用BinaryFormatter进行序列化,类中的所有成员变量(甚至标记为 private 的变量)都将被序列化。
2、使用SoapFormatter进行序列化,类中的所有成员变量(甚至标记为 private 的变量)都将被序列化。
3、使用XmlSerializer进行序列化,只有公共字段被序列化。
第一种方式提供了一个简单的二进制数据流以及某些附加的类型信息。而第二种将数据流格式化为XML存储。第三种其实和第二种差不多也是XML的格式存储,只不过比第二种的XML格式要简化很多(去掉了SOAP特有的额外信息)。
1,2必须使用[Serializable]属性将类标志为可序列化的,3可以不用对类用[Serializable]属性进行标记
1,2可以序列化类中的所有成员变量(私有的,公有的),3只可以序列化类中的公有成员变量。
如果某个类的元素不想被序列化, 1,2可以使用[NonSerialized]属性来标志,3、可以使用[XmlIgnore]来标志。
1.二进制流序列化及反序列化
1.1序列化
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace xuliehua
{//用[Serializable]标记要序列化的类型[Serializable]public class Person{public string name;public int age;public string adress;public void say(){Console.WriteLine("hello world");}}class Program{static void Main(string[] args){List<Person> lp = new List<Person>() { new Person(){name="凯",age=21,adress="影流"},new Person(){name="刘",age=23,adress="守望之海"},new Person(){name="陆",age=22,adress="征服之海"},new Person(){name="星",age=19,adress="艾欧尼亚"},new Person(){name="伟",age=24,adress="影流"},};//创建一个文件流using (FileStream fs = new FileStream(@"E:\person.txt", FileMode.OpenOrCreate)){//创建二进制序列化器BinaryFormatter bf = new BinaryFormatter();//序列化bf.Serialize(fs, lp);}}}
}
查看序列化后的文件:
1.2反序列化
反序列化需要引用原来的类所在的程序集,如图所示:
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace fanxuliehua
{class Program{static void Main(string[] args){//创建一个文件流using (FileStream fs = new FileStream(@"E:\person.txt", FileMode.Open)){//创建二进制序列化器BinaryFormatter bf = new BinaryFormatter();//反序列化var result = (List<xuliehua.Person>)bf.Deserialize(fs);result.ForEach(r => Console.WriteLine(r.name + "\t" + r.age + "\t" + r.adress));}}}
}
结果如图所示:
2.XML序列化及反序列化
2.1序列化
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
namespace xuliehua
{public class Person{public string name;public int age;public string adress;public void say(){Console.WriteLine("hello world");}}class Program{static void Main(string[] args){List<Person> lp = new List<Person>() { new Person(){name="萨满",age=211,adress="影流"},new Person(){name="猎人",age=231,adress="守望之海"},new Person(){name="法师",age=221,adress="征服之海"},new Person(){name="战士",age=191,adress="艾欧尼亚"},new Person(){name="术士",age=241,adress="影流"},};using (FileStream fs = new FileStream(@"E:\person.xml", FileMode.OpenOrCreate)){XmlSerializer xs = new XmlSerializer(typeof(List<Person>));xs.Serialize(fs, lp);}}}
}
查看序列化后的文件:
2.2反序列化
同样,也需要引用原来的类所在的程序集。
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
namespace fanxuliehua
{class Program{static void Main(string[] args){using (FileStream fs = new FileStream(@"E:\person.xml", FileMode.Open)){XmlSerializer xs = new XmlSerializer(typeof(List<xuliehua.Person>));var result = (List<xuliehua.Person>)xs.Deserialize(fs);result.ForEach(r => Console.WriteLine(r.name + "\t" + r.age + "\t" + r.adress));}}}
}
结果如图所示:
二进制流序列化(反序列化)和XML序列化(反序列化)相关推荐
- 二进制序列化器、XML序列化器、Json序列化器
二进制序列化器.XML序列化器.Json序列化器 序列化是将对象的状态信息转换未可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区读取或反序列化 ...
- 简单了解各种序列化技术-XML序列化框架介绍
XML序列化的好处在于可读性好,方便阅读和调试.但是序列化以后的字节码文件比较大,而且效率不高,适用于对性能不高,而且QPS较低的企业级内部系统之间的数据交换的场景,同时XML又具有语言无关性,所以还 ...
- C#二进制流的序列化和反序列化操作
C#项目中较多使用了序列化和反序列化,较为常用的序列化和反序列化操作有二进制流,JSON,XML等,现在介绍一下.net中二进制流的序列化和反序列化操作方法: 1.将对象序列化为二进制流: /// & ...
- 开心网外挂开发之 XML序列化于反序列化
通过昨天的文章我们已经了解了开发一个开心网的外挂所需要的最基本的东本,接下来的工作可以说基本上就上围绕这个基础来进行的,我写这一系列文章主要的目地不仅仅是为了让大家了解怎么开发开心网外挂,最主要的目过 ...
- XML 序列化与反序列化
XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary>/// 对象序列化成XML文件/// </summary>/// <param name= ...
- XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对 ...
- Xml序列化、反序列化帮助类
之前从网络上找了一个Xml处理帮助类,并整理了一下,这个帮助类针对Object类型进行序列化和反序列化,而不需要提前定义Xml的结构,把它放在这儿供以后使用 1 /// <summary> ...
- c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)
我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...
- XML序列化和反序列化(C#)
主要参考资料: http://www.codeproject.com/Articles/483055/XML-Serialization-and-Deserialization-Part-1 http ...
最新文章
- 新安装Ubuntu加载时提示“为/检查磁盘时发生严重错误”的解决方法
- Struts1和Struts2的区别和对比(完整版)
- dropdownlist三级联动怎么实现_一张表实现三级联动
- 如何用c语言倒序输出字母,菜鸟求助-如何用指针法将一串字符按单词的倒序输出?如:i love yo...
- 鸿蒙os开发者大会的时间,华为开发者大会2020时间已确定,鸿蒙2.0和EMUI 11即将到来...
- poj3176 基础的动态规划算法 挑战程序设计竞赛
- android联系人源码分析,android 联系人源码分析 新字段的添加流程
- python多重继承super父类参数_多重继承如何处理super()和不同的参数?
- hadoop 传感器数据_大数据时代Hadoop的本质,你有过认真了解吗?
- 解决hibernate只能插入一条数据的问题
- 网易云Android高级,网易云音乐Android新版 一键升本地音质
- 生成对抗网络(十)----------infoGAN
- Algorithm Review 5 图论
- 神经网络的BP算法推导详解
- 新手CrossApp 之CollectionView小结
- Python3制作网易云音乐下载器
- 什么表示计算机的存储容量,存储容量
- Illegal mix of collations
- 灵 源 大 道 歌 · 曹 文 逸
- QR code二维码简介及Qrencode库的移植与使用