序列化是将對象狀态轉換為可保持或可傳輸的格式的過程,反序列化則過程相反。用于存儲和傳輸資料。
(一)asp.net序列化與反序列化
.net提供多種序列化類
(1)BinaryFormatter 類
名字空間:System.Runtime.Serialization.Formatters.Binary
這個類用于以二進制格式将對象或整個連接配接對象圖形序列化和反序列化
構造器兩個:
BinaryFormatter()
BinaryFormatter(ISurrogateSelector, StreamingContext)
介紹它的兩個主要方法:
1 Serialize方法
将對象或連接配接對象圖形序列化為給定流
它有兩個重載:
Serialize(Stream, Object)
Serialize(Stream, Object,Header[])
類Customer
public class Customer
{
public int Unid { get; set; }
public string Name { get; set; }
public string Call { get; set; }
}
下邊通過示例來測試序列化方法Serialize
public void TestSerialize()
Customer customer = new Customer {Unid=1,Name="宋江",Call="89589689" };
FileStream fs = new FileStream("test.dat", FileMode.Create);
BinaryFormatter formatter = new BinaryFormatter();
try
{
formatter.Serialize(fs, customer);
}
catch
{ }
finally
fs.Close();
測試時,這個會抛出異常:類型“SerializeTest.Customer”未标記為可序列化。是以要在Customer類上添加修飾标簽
[Serializable]
測試,在bin\debug檔案夾中可以看到test.dat檔案。
2 Deserialize方法
将流反序列化為對象圖形,它也有兩個重載
Deserialize(Stream)
Deserialize(Stream, HeaderHandler)
通過示例來測試從流進行反序列化
public void TestDeserialize()
Customer customer = new Customer();
FileStream fs = new FileStream("test.dat", FileMode.Open);
customer= formatter.Deserialize(fs) as Customer;
fs.Close();
Console.WriteLine(customer.Name);
結果輸出:宋江
(2)SoapFormatter類
名字空間:System.Runtime.Serialization.Formatters.Soap
以 SOAP 格式将對象或整個連接配接對象的圖形序列化和反序列化。
SOAP就是simple object access protocol的縮寫,簡單對象傳輸協定。是一種輕量的,簡單的,基于xml的協定。
這個要添加對System.Runtime.Serialization.Formatters.Soap.dll的引用
構造器:
SoapFormatter xx=new SoapFormatter()
SoapFormatter(ISurrogateSelector, StreamingContext)
主要介紹其中2個方法
Serialize(Stream, Object)
Serialize(Stream, Object, Header[]
public void TestSoapSerialize()
Customer customer = new Customer { Unid = 1, Name = "宋江", Call = "89589689" };
FileStream fs = new FileStream("soaptest.dat", FileMode.Create);
SoapFormatter formatter = new SoapFormatter();
打開bin\debug中的soaptest.dat檔案,這就是soap格式。
反序列化soap格式
其它的不多說了。
public void TestSoapDeserialize()
FileStream fs = new FileStream("soaptest.dat", FileMode.Open);
customer = formatter.Deserialize(fs) as Customer;
(3)XmlSerializer類
将對象序列化到 XML 文檔中和從 XML 文檔中反序列化對象
名字空間:System.Xml.Serialization
構造方法太多,不列舉了,可以參考幫助
拿出一個來說:
public void Serialize(XmlWriter xmlWriter,Object o)
public void TestXmlSerialize()
FileStream fs = new FileStream("xmltest.xml", FileMode.Create);
XmlSerializer formatter = new XmlSerializer(typeof(Customer));
formatter.Serialize(fs, customer);
結果可以到debug\bin裡檢視。
public void TestXmlDeserialize()
FileStream fs = new FileStream("xmltest.xml", FileMode.Open);
(二)Json序列化與反序列化
Json相關可見:
<a href="http://www.cnblogs.com/jams742003/category/225387.html" target="_blank">http://www.cnblogs.com/jams742003/category/225387.html</a>
Json序列化和反序列化指的是:對象序列化為JSON,并可用于從 JSON 反序列化對象
在.net 3.5中
名字空間:System.Runtime.Serialization.Json
但程式集是: System.ServiceModel.Web.dll
(1)DataContractJsonSerializer類
構造方法很多。
介紹這個類其中2個方法:
1 WriteObject方法
有好種重載,這裡測試一個:
public override void WriteObject(Stream stream,Object graph)
測試:
public void TestJsonSerialize()
DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(Customer));
FileStream fs = new FileStream("json.txt", FileMode.Create);
ds.WriteObject(fs, customer);
進行Json序列化時,類型不必添加修飾标簽
在bin\debug裡可以看到json串。
有關json串請見:
<a href="http://www.cnblogs.com/jams742003/archive/2009/12/29/1634764.html" target="_blank">http://www.cnblogs.com/jams742003/archive/2009/12/29/1634764.html</a>
2 ReadObject方法
重載很多。
public override Object ReadObject(Stream stream)
public void TestJsonDeserialize()
DataContractJsonSerializer ds =
new DataContractJsonSerializer(typeof(Customer));
FileStream fs = new FileStream("json.txt", FileMode.Open);
var cc = ds.ReadObject(fs);
(2)JavaScriptSerializer類
為啟用 AFAX 的應用程式提供序列化和反序列化功能
名字空間:System.Web.Script.Serialization
程式集:System.Web.Extensions(在 System.Web.Extensions.dll 中)
說其中2個方法
Serialize(Object)
Serialize(Object, StringBuilder)
public void TestJsSerialize()
JavaScriptSerializer js = new JavaScriptSerializer();
Console.WriteLine(js.Serialize(customer));
輸出串:{"Unid":1,"Name":"宋江","Call":"89589689"}
public void TestJsDeserialize()
string str = File.ReadAllText("jsjson.txt");
JavaScriptSerializer js = new JavaScriptSerializer();
Customer customer = js.Deserialize<Customer>(str);
(3)Json.net
這是一個第三方工具
名字空間:Newtonsoft.Json
添加Newtonsoft.Json.dll程式集
其中2個方法:
1 SerializeObject方法
public void TestJsonnetSerialize()
string strJson=JsonConvert.SerializeObject(customer);
StreamWriter sw = File.CreateText("jsonnet.txt");
sw.Write(strJson);
sw.Close();
2 DeserializeObject方法
public void TestJsonnetDeserialize()
string str = File.ReadAllText("jsonnet.txt");
Customer customer = JsonConvert.DeserializeObject<Customer>(str);
更多關于json.net的請見:
<a href="http://www.cnblogs.com/jams742003/archive/2009/11/04/1595737.html" target="_blank">http://www.cnblogs.com/jams742003/archive/2009/11/04/1595737.html</a>
部落格園大道至簡
<a href="http://www.cnblogs.com/jams742003/" target="_blank">http://www.cnblogs.com/jams742003/</a>
轉載請注明:部落格園