论序列化与反序列化(深入理解序列化与反序列化)

网友投稿 260 2022-08-03

论序列化与反序列化(深入理解序列化与反序列化)

首先给大家介绍一下序列化是用来干什么的,他为什么出现

序列化这种技术说到底其实就是把临时数据保存在电脑上。大家都知道对于程序而言对象是一种稍纵即逝的数据,不仅仅是程序重启、电脑重启,就连内部函数的变化也有可能导致对象的消失,但是总有一些对象是大家不想让其随意消失的并且想在下一次开启程序的时候进行加载,在这种环境下-序列化便出现了,它的意义就是为了保持对象的持久化

在此我为大家介绍一下C#当中的XML序列化和二进制序列化,基本所有序列化的方式都差不多因此就着重介绍这两种比较常用的序列化方式

假设类名为:Person  对象名为:P

一: XML序列化

第一步当然是引入命名空间:Using System.IO;   Using System.Xml.Serialization;

先实例化我们的类-XmlSerializer

XmlSerializer xml = new XmlSerializer(typeof(Person));

实例化类时的参数为一个Type类型,利用typeof就可以了,typeof里面传入类名

创建出对象xml后开始创FileStream的对象

FileStream fs = new FileStream("asd.xml",FileMode.OpenOrCreate);

实例化该类时传入的参数有两个,第一个是你为文件起的名字-string,第二个是你对IO的操作、一般默认为FileMode.OpenOrCreat

然后就是序列化了~   方法-Serialize

xml.Serialize(fs,P);

用Serialize这个方法的两个参数分别是实例化FileStream的对象名-fs 以及你想要保存的对象的名-P

完成这个方法后,我们的XML序列化就结束了~

我们想要反序列化的话也简单,就是最后调用的方法不一样,在此用方法-Doserialize

Object obj = xml.Doserialize(fs);

用这个方法只要传入实例化FileStream的对象名-fs 就可以了,他有一个Object类型的返回值,接受它,然后把它强转为你需要的类型就OK了

二:二进制序列化

二进制序列化和XML序列化的架构差不多

首先也是引入命名空间:Using System.IO;

Using System.Runtime.Senalization.Formatter.Binary;

先实例化我们的类-BinaryFormatter

BinaryFormatter bin = new BinaryFormatter();

此类实例化时不用参数哦~

然后创FileStream的对象

FileStream fs = new FileStream("asd.xml",FileMode.OpenOrCreate);

实例化该类时传入的参数有两个,第一个是你为文件起的名字-string,第二个是你对IO的操作、一般默认为FileMode.OpenOrCreat

然后就是序列化了~   方法-Serialize

bin.Serialize(fs,P);

用Serialize这个方法的两个参数分别是实例化FileStream的对象名-fs 以及你想要保存的对象的名-P

完成这个方法后,我们的二进制序列化就结束了~

Object obj = bin.Doserialize(fs);

用这个方法只要传入实例化FileStream的对象名-fs 就可以了,他有一个Object类型的返回值,接受它,然后把它强转为你需要的类型就OK了

虽然两者大部分都是一致的,但是二进制序列化的要求更加多,如下:

1)要进行序列化的类型、类型的父类以及类型中的所有成员的类型都统统要求标记为:

[Serializable]

2) 二进制序列化只能对类中的字段进行序列化,如果有一些字段不想让其序列化只要标记为:

[NonSerialized]

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:数据类型和特殊类型-C#(常见数据类型有)
下一篇:表达式树练习实践:C#值类型、引用类型、泛型、集合、调用函数(表达式树的创建)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~