通州北大青鳥校區(qū)學(xué)術(shù)部丁老師提供:
序列化又稱串行化,是.NET運(yùn)行時(shí)環(huán)境用來支持用戶定義類型的流化的機(jī)制。其目的是以某種存儲(chǔ)形成使自定義對(duì)象持久化,或者將這種對(duì)象從一個(gè)地方傳輸?shù)搅硪粋(gè)地方。
.NET框架提供了兩種串行化的方式:1、是使用BinaryFormatter進(jìn)行串行化;2、使用SoapFormatter進(jìn)行串行化;3、使用XmlSerializer進(jìn)行串行化。第一種方式提供了一個(gè)簡(jiǎn)單的二進(jìn)制數(shù)據(jù)流以及某些附加的類型信息,而第二種將數(shù)據(jù)流格式化為XML存儲(chǔ);第三種其實(shí)和第二種差不多也是XML的格式存儲(chǔ),只不過比第二種的XML格式要簡(jiǎn)化很多(去掉了SOAP特有的額外信息)。
可以使用[Serializable]屬性將類標(biāo)志為可序列化的。如果某個(gè)類的元素不想被序列化,1、2可以使用[NonSerialized]屬性來標(biāo)志,2、可以使用[XmlIgnore]來標(biāo)志。
1、使用BinaryFormatter進(jìn)行串行化
下面是一個(gè)可串行化的類:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
///
/// ClassToSerialize 的摘要說明
///
[Serializable]
public class ClassToSerialize
{
public int id = 100;
public string name = "Name";
[NonSerialized]
public string Sex = "男";
}
(通州北大青鳥校區(qū))
下面是串行化和反串行化的方法:
public void SerializeNow()
{
ClassToSerialize c = new ClassToSerialize();
FileStream fileStream = new FileStream("c:\\temp.dat", FileMode.Create);
BinaryFormatter b = new BinaryFormatter();
b.Serialize(fileStream, c);
fileStream.Close();
}
public void DeSerializeNow()
{
ClassToSerialize c = new ClassToSerialize();
c.Sex = "kkkk";
FileStream fileStream = new FileStream("c:\\temp.dat", FileMode.Open, FileAccess.Read, FileShare.Read);
BinaryFormatter b = new BinaryFormatter();
c = b.Deserialize(fileStream) as ClassToSerialize;
Response.Write(c.name);
Response.Write(c.Sex);
fileStream.Close();
}
調(diào)用上述兩個(gè)方法就可以看到串行化的結(jié)果:Sex屬性因?yàn)楸粯?biāo)志為[NonSerialized],故其值總是為null。
通州北大青鳥校區(qū),未完待續(xù)