《课题_序列化与反序列化,及Json序列化反序列化.doc》由会员分享,可在线阅读,更多相关《课题_序列化与反序列化,及Json序列化反序列化.doc(11页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、序列化与反序列化,及Json序列化反序列化序列化是将对象状态转换为可保持或可传输的格式的过程,反序列化则过程相反。用于存储与传输数据。(一)asp序列化与反序列化提供多种序列化类(1)BinaryFormatter类名字空间:System.Runtime.Serialization.Formatters.Binary这个类用于以二进制格式将对象或整个连接对象图形序列化与反序列化构造器两个:BinaryFormatter()BinaryFormatter(ISurrogateSelector,StreamingContext)介绍它的两个主要方法:1 Serialize方法将对象或连接对象图形序
2、列化为给定流它有两个重载:Serialize(Stream,Object)Serialize(Stream,Object,Header)类CustomerpublicclassCustomerpublicintUnidget;set;publicstringNameget;set;publicstringCallget;set;下边通过示例来测试序列化方法SerializepublicvoidTestSerialize()Customercustomer=newCustomerUnid=1,Name=宋江,Call=89589689;FileStreamfs=newFileStream(tes
3、t.dat,FileMode.Create);BinaryFormatterformatter=newBinaryFormatter();tryformatter.Serialize(fs,customer);catchfinallyfs.Close();测试时,这个会抛出异常:类型“SerializeTest.Customer”未标记为可序列化。所以要在Customer类上添加修饰标签SerializablepublicclassCustomer测试,在bindebug文件夹中可以看到test.dat文件。2 Deserialize方法将流反序列化为对象图形,它也有两个重载Deseriali
4、ze(Stream)Deserialize(Stream,HeaderHandler)通过示例来测试从流进行反序列化publicvoidTestDeserialize()Customercustomer=newCustomer();FileStreamfs=newFileStream(test.dat,FileMode.Open);BinaryFormatterformatter=newBinaryFormatter();customer=formatter.Deserialize(fs)asCustomer;fs.Close();Console.WriteLine(customer.Name
5、);结果输出:宋江(2)SoapFormatter类名字空间:System.Runtime.Serialization.Formatters.Soap以SOAP格式将对象或整个连接对象的图形序列化与反序列化。SOAP就是simple object access protocol的缩写,简单对象传输协议。是一种轻量的,简单的,基于xml的协议。这个要添加对System.Runtime.Serialization.Formatters.Soap.dll的引用构造器:SoapFormatterxx=newSoapFormatter()SoapFormatter(ISurrogateSelector,
6、StreamingContext)主要介绍其中2个方法1Serialize方法Serialize(Stream,Object)Serialize(Stream,Object,HeaderpublicvoidTestSoapSerialize()Customercustomer=newCustomerUnid=1,Name=宋江,Call=89589689;FileStreamfs=newFileStream(soaptest.dat,FileMode.Create);SoapFormatterformatter=newSoapFormatter();tryformatter.Serialize
7、(fs,customer);catchfinallyfs.Close();打开bindebug中的soaptest.dat文件,这就是soap格式。2 Deserialize方法反序列化soap格式Deserialize(Stream)Deserialize(Stream,HeaderHandler)其它的不多说了。publicvoidTestSoapDeserialize()Customercustomer=newCustomer();FileStreamfs=newFileStream(soaptest.dat,FileMode.Open);SoapFormatterformatter=n
8、ewSoapFormatter();customer=formatter.Deserialize(fs)asCustomer;fs.Close();Console.WriteLine(customer.Name);(3)XmlSerializer类将对象序列化到XML文档中与从XML文档中反序列化对象名字空间:System.Xml.Serialization构造方法太多,不列举了,可以参考帮助1Serialize方法拿出一个来说:publicvoidSerialize(XmlWriterxmlWriter,Objecto)publicvoidTestXmlSerialize()Customer
9、customer=newCustomerUnid=1,Name=宋江,Call=89589689;FileStreamfs=newFileStream(xmltest.xml,FileMode.Create);XmlSerializerformatter=newXmlSerializer(typeof(Customer);formatter.Serialize(fs,customer);fs.Close();结果可以到debugbin里查看。2 Deserialize方法publicvoidTestXmlDeserialize()Customercustomer=newCustomer();F
10、ileStreamfs=newFileStream(xmltest.xml,FileMode.Open);XmlSerializerformatter=newXmlSerializer(typeof(Customer);customer=formatter.Deserialize(fs)asCustomer;fs.Close();Console.WriteLine(customer.Name);(二)Json序列化与反序列化Json序列化与反序列化指的是:对象序列化为JSON,并可用于从JSON反序列化对象在 3.5中名字空间:System.Runtime.Serialization.Json
11、但程序集是:System.ServiceModel.Web.dll(1)DataContractJsonSerializer类构造方法很多。介绍这个类其中2个方法:1 WriteObject方法有好种重载,这里测试一个:publicoverridevoidWriteObject(Streamstream,Objectgraph)测试:publicvoidTestJsonSerialize()Customercustomer=newCustomerUnid=1,Name=宋江,Call=89589689;DataContractJsonSerializerds=newDataContractJs
12、onSerializer(typeof(Customer);FileStreamfs=newFileStream(json.txt,FileMode.Create);ds.WriteObject(fs,customer);fs.Close();进行Json序列化时,类型不必添加修饰标签在bindebug里可以看到json串。2 ReadObject方法重载很多。publicoverrideObjectReadObject(Streamstream)测试:publicvoidTestJsonDeserialize()DataContractJsonSerializerds=newDataCont
13、ractJsonSerializer(typeof(Customer);FileStreamfs=newFileStream(json.txt,FileMode.Open);varcc=ds.ReadObject(fs);fs.Close();(2)JavaScriptSerializer类为启用AFAX的应用程序提供序列化与反序列化功能名字空间:System.Web.Script.Serialization程序集:System.Web.Extensions(在System.Web.Extensions.dll中)说其中2个方法1 Serialize方法Serialize(Object)Ser
14、ialize(Object,StringBuilder)publicvoidTestJsSerialize()Customercustomer=newCustomerUnid=1,Name=宋江,Call=89589689;JavaScriptSerializerjs=newJavaScriptSerializer();Console.WriteLine(js.Serialize(customer);输出串:Unid:1,Name:宋江,Call:895896892 Deserialize方法publicvoidTestJsDeserialize()stringstr=File.ReadAll
15、Text(jsjson.txt);JavaScriptSerializerjs=newJavaScriptSerializer();Customercustomer=js.Deserialize(str);Console.WriteLine(customer.Name);(3)Json这是一个第三方工具名字空间:Newtonsoft.Json添加Newtonsoft.Json.dll程序集其中2个方法:1SerializeObject方法publicvoidTestJsonnetSerialize()Customercustomer=newCustomerUnid=1,Name=宋江,Call
16、=89589689;stringstrJson=JsonConvert.SerializeObject(customer);StreamWritersw=File.CreateText(jsonnet.txt);sw.Write(strJson);sw.Close();2DeserializeObject方法publicvoidTestJsonnetDeserialize()stringstr=File.ReadAllText(jsonnet.txt);Customercustomer=JsonConvert.DeserializeObject(str);Console.WriteLine(customer.Name);第 11 页