C#序列化和反序列化有3种方式。我们可以在其中决定一个类中哪些属性序列化或者不序列化,可以通过使用NonSerialized属性标记成员变量来防止它们被序列化。
C#中常见的序列化的方法主要是:BinaryFormatter、SoapFormatter、XML序列化。
序列化是指将对象实例的状态存储到存储媒体的过程。在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。
一、BinaryFormatter序列化方式
上面贴了一个使用窗口序列化和反序列化显示的例子。
二、SoapFormatter序列化方式
与BinaryFormatter序列化方式类似,只需要把IFormatter formatter= new BinaryFormatter()改成IFormatter fromatter= new SoapFormatter(),并且程序集System.Runtime.Serilization.Formatters.Soap.dll(.net自带的)
序列化之后的文件是Soap格式的文件(简单对象访问协议(Simple Object Access Protocol,SOAP),是一种轻量的、简单的、基于XML的协议,它被设计成在WEB上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。
三、XML序列化方式
XmlSerializer formatter = new XmlSerializer(typeof(test));注意:采用xml序列化的方式只能保存public的字段和可读写的属性,对于private等类型的字段不能进行序列化