《net中对象序列化技术浅谈》由会员分享,可在线阅读,更多相关《net中对象序列化技术浅谈(15页珍藏版)》请在金锄头文库上搜索。
1、yy序列化是将对象转换为容易传输的格式的过程。例如,对以序列化一个对象,然后 使用HTTP通过Internet在客户端和服务器之间传输该对象。反之,反序列化根据流重 新构造对象。中有提供了几种序列化的方式:二进制序列化XML序列化SOAP序列化二进制序列化所谓二进制序列化,指的是对彖序列化之后是二进制形式的。二进制序列化是通过Binary Formatter 类来实现的,这个类位于 System.Runtime.Serialization.Formatters.Bina ry命名空间下。XML序列化所谓XML序列化,是指对象序列化之后的结果是XML形式的。保存XML序列化是通过X mISeri
2、alizer类来实现的,这个类位于System.Xml.Serialization命名空间下。SOAP序列化所谓SOAP序列化是指对彖序列化之后的结果符合SOAP协议,也就是可以通过SOAP协 议传输(不知道SOAP协议?百度一下吧)。SOAP序列化是通过SoapFormatter类來 实现的,这个类位丁 System.Runtime.Serialization.Formatters.Soap 命名空间下, 并且需要注意需要手动添加对这个命名空间的引用,如下图所示:组件名称Systwm. Runtime Seri ali zati on版本3. 0.0.0Sy t mm Runli m q .
3、 $ er i al i 工 a t i on. Qt t ws.S o 翎2. 0.0.0System. SecuritySystem. Servi ceModelSystem. ServiceModel. WebSystem. Servi ceProcessSystem. SpeechSystmm. TransactionsSystem. WebSystem. Web. Extensi onsSystem. Web Extensions. Design System. Web. MobileSystem. Web. RegularExpress!ons System. Web. Servi
4、 ces r hi * iT?2.0.0.03. 0.0.03. 5. 0.02. 0.0.03. 0.0.02. 0.0.02. 0.0.03. 5. 0.03. 5. 0.02. 0.0.02. 0.0.02. 0.0.0c c c c尉V2.0V2oooooooooooo V2.V2.V2.V2.V2.V2.V2.V2.V2.V2.V2.V2.C取消确定下面编写一个类用于序列化和反序列化,这个类的代码如下:using System;using System.Collections.Generic;using System.Text;namespace MySerializeDemoSer
5、ializable/ /要序列化的对象/作者:周公/编写时间:2009-03-10/ public class My Object/NonSerializedprivate string name;private DateTime birthday;private string homePlace;/ /出生地/ public string HomePlaceget return homePlace; set homePlace = value; / /生 Fl/ public DateTime Birthdayget return birthday; set birthday = value
6、; / /姓名/ public string Nameget return name; set name = value; / /年龄/ public int Ageget return DateTime.Now.Year - birthday.Year; / / override 了 ToString()方法/ / public override string ToString()59.return string.Format(n姓名:0住日:1,出生地:2,年龄:3H,name,birthday,homePlace,Age);60. 61.62. 63. using System;usin
7、g System Col lections Generic;using System Text;namespace MySerializeDemo fSerializable/ /要序列化的对彖/作者:周公/ 编写时间:2009-03-10/ public class MyObject /NonSerializedprivate string name;private DateTime birthday;nri vat p ctr ihnmpP 1 acp d 1下面是分别用上面的三个类进行序列化和反序列化的代码:view plaincopy to clipboardprint?1. usin
8、g System;2. using System.Collections.Generic;3. using System.Text;4. using SystemO;5. using System.Runtime.Serialization.Formatters;6. using System.Runtime.Serialization.Formatters.Binary;7. using System.Runtime.Serialization.Formatters.Soap;8. using System.Xml.Serialization;9.9. namespace MySeriali
9、zeDemo10. 11. class Program12. 14.static void Main(string args)My Object obj = new MyObject();obj.Birthday = new DateTime(1979, 11, 7);obj.HomePlace =湖北”;obj.Name = ”周公”;Console.WriteLine(H=使用 BinaryFormatter 类进行序列化和反序列 化。=);BinarySerialize(obj);BinaryDeserialize(nC:MyObject.dat);Console.WriteLine(*
10、=使用 SoapFormatter 类进行序列化和反序列化。SOAPSerialize(obj);SOAPDeserialize(MC: MyObject.soapH);Console.WriteLine(,=使用 XmlSerializer 类进行序列化和反序列化。XMLSerialize(obj);XMLDeserialize(,C:MyObject.xmr,);/ /二进制序列化对象/ / param name=obj”Av/paramApublic static void BinarySerialize(MyObject obj)using (FileStream stream = n
11、ew FileStream(C:MyObject.datn, FileMode.Create, FileAccess.Write)BinaryFormatter formater = new BinaryFormatter();formater.Serialize(stream, obj);Console. WriteLine(,f 对象已经被序列化+ obj.ToString();/ /二进制反序列化/ / public static void BinaryDeserialize(string fileName)using (FileStream stream = new FileStrea
12、m(fileName, FileMode.Open, FileAccess. Read)BinaryFormatter formater = new BinaryFormatter();My Object obj=(MyObject)formater.Deserialize(stream);Console.WriteLine(对象己经被反序列化。” + obj.ToString();/ /二进制序列化对象/ / public static void SOAPSerialize(MyObject obj)using (FileStream stream = new FileStream(,C:M
13、yObject.soapM, FileMode.Create, FileAccess.Write)SoapFormatter formater = new SoapFormatter();formater.Serialize(stream, obj);Console.WriteLineC* 对象己经被序列化。” + obj.ToString();/ /二进制反序列化/ / public static void SOAPDeserialize(string fileName)using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess .Read)SoapFormatter formater =