net中序列化和反序列化的区别是什么

  介绍

这篇文章将为大家详细讲解有关。净中序列化和反序列化的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强>一、什么序列化和反序列化

序列化通俗地讲就是将一个对象转换成一个字节流的过程,这样就可以轻松保存在磁盘文件或数据库中。反序列化是序列化的逆过程,就是将一个字节流转换回原来的对象的过程。

然而为什么需要序列化和反序列化这样的机制呢?这个问题也就涉及到序列化和反序列化的用途了,

对于序列化的主要用途有:

<李>

将应用程序的状态保存在一个磁盘文件或数据库中,并在应用程序下次运行时恢复状态,例如,Asp.net中利用序列化和反序列化来保存和恢复会话状态。

<李>

一组对象可以轻松复制到Windows窗体的剪贴板中,再粘贴回同一个或者另一个应用程序。

<李>

将对象按值从一个应用程序域中发送到另一个程序域

并且如果把对象序列化成内存中的字节流,就可以利用一些其他的技术来处理数据,例如,对数据进行加密和压缩等。

<强>二、序列化和反序列简单使用

。净框架提供二种序列化方式:

<李>

二进制序列化

<李>

XML和SOAP序列化

序列化和反序列化的简单使用:

using 系统;   using 先;   using  System.Runtime.Serialization.Formatters.Binary;      namespace 可串行化的   {   (序列化)才能   public 才能;class 人   {才能   ,,,public  string  personName;      ,,,(NonSerialized)   ,,,public  string  personHeight;      ,,,private  int 人士;   ,,,public  int 人士   ,,,{   ,,,,,get  {, return 人士,}   ,,,,,set  {=, personAge 价值;,}   ,,,}      ,,,public  void 写()   ,,,{   ,,,,,Console.WriteLine (“Person 名称:,“+ personName);   ,,,,,Console.WriteLine (“Person 高度:,“,+ personHeight);   ,,,,,Console.WriteLine (“Person 年龄:,“+,人物);   ,,,}      ,,}   class 才能;程序   {才能   ,,,static  void  Main (string [], args)   ,,,{   ,,,,,Person  Person =, new 人();   ,,,,,person.personName =,“Jerry";   ,,,,,person.personHeight =,“175 cm";   ,,,,,person.PersonAge =, 22;   ,,,,,Stream  Stream =,序列化(人);      ,,,,,//为了演示,都重置   ,,,,,stream.Position =, 0;   ,,,,,person =,空;      ,,,,,person =,反序列化(流);   ,,,,,person.Write ();   ,,,,,Console.Read ();      ,,,}   ,,,private  static  MemoryStream 序列化(Person 人)   ,,,{   ,,,,,MemoryStream  stream =, new  MemoryStream ();      ,,,,,//,构造二进制序列化格式器   ,,,,,BinaryFormatter  BinaryFormatter =, new  BinaryFormatter ();   ,,,,,//,告诉序列化器将对象序列化到一个流中   ,,,,,binaryFormatter.Serialize(流,,人);      ,,,,,return 流;      ,,,}      ,,,private  static  Person 反序列化(Stream 流)   ,,,{   ,,,,,BinaryFormatter  BinaryFormatter =, new  BinaryFormatter ();   ,,,,,return (人)binaryFormatter.Deserialize(流);   ,,,}      ,,}   }

主要是调用System.Runtime.Serialization.Formatters。二进制命名空间下的BinnaryFormatter类来进行序列化和反序列化,调用反序列化后的结果截图:

。净中序列化和反序列化的区别是什么

从中可以看出除了标记NonSerialized的其他成员都能序列化,注意这个属性只能应用于一个类型中的字段,而且会被派生类型继承。

SOAP和XML的序列化和反序列化和上面类似,只需要改下格式化器就可以了,这里我就不列出来了。

<强>三、控制序列化和反序列化

有两种方式来实现控制序列化和反序列化:

<李>

通过OnSerializing,> using 系统;   using 先;   using  System.Runtime.Serialization;   using  System.Runtime.Serialization.Formatters.Binary;      namespace  ControlSerialization   {   (序列化)才能   public 才能;class 循环   {才能   ,,,private  double 半径;,//半径   ,,,(NonSerialized)   ,,,public  double 区域;,//面积      ,,,public 圆(double  inputradiu)   ,,,{   ,,,,,radius =, inputradiu;   ,,,,,area =, Math.PI  *, radius  *,半径;   ,,,}      null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

net中序列化和反序列化的区别是什么