文章转自:http://blog.sina.com.cn/s/blog_645752e60100h4w9.html
序列化是将一个对象保存到存储介质上或者将对象进行转换使之能够在网络上传送的行为。能对一个类进行序列化的条件是:该类的任何基类可序列化;该类应用了Serializable特性。 序列化的应用: 1、配置程序的加载和保存 我们可以创建一个类,它包含了应用程序的配置信息。当应用程序加载时,配置对象被反序列化到内存中的配置类;当用户在程序运行的过程中对配置文件进行修改了的时候,可以把内存的配置类序列化到硬盘。这样,方便地实现了配置文件的读写。 2、分布式计算 序列化的最大优势在于分布式计算。两台机器拥有相同的程序集,则可以利用序列化技术进行通信。A机器通过序列化技术向B机器发送对象的快照,B机器能快速的、正确地重建出该对象来。 在.net framework中,有三种序列化机制:二进制、XML和简单对象访问协议(SOAP)。它们的优缺点阐述如下: 1、二进制序列化的最大有点是,类型数据可以准确的表示出来。因为二进制序列化对象的共有和私有成员,所以在反序列化的时候可以忠诚地重建出该对象的状态。 2、XML只序列化对象的公共属性和字段。在XML序列化时,私有字段和其他实例对象就丢失了。 3、XML和SOAP是开发标准,具有很好的移植性。 进行序列化和反序列化的代码很简单,三者对应的名空间及对应的格式化类如下: 二进制--System.Runtime.Serialization.Formatters.Binary—BinaryFormatter XML-- System.Xml.Serialization—XmlSerializer SOAP-- System.Runtime.Serialization.Formatters.SOAP—SoapFormatter 序列化和反序列化的代码: [Serializable] class Test { private String name; public String Name { get { return name; } set { name = value; } } private int age; public int Age { get { return age; } set { age = value; } } } Test t = new Test(); t.Name = "sanclark"; t.Age = 22; MemoryStream ms = new MemoryStream(); IFormatter bf = new BinaryFormatter(); bf.Serialize(ms, t); ms.Seek(0, SeekOrigin.Begin); Test newObject = (Test) bf.Deserialize(ms);//重建Test对象 序列化的内容是可以定制的,可以通过继承ISerializable接口,重载里面的构造函数和GetObjectData方法即可,此处略去。 |