.net3.5提供了json對象序列化與反序列化的類。位置在:System.Runtime.Serialization.Json空間下。其中如果要應(yīng)用這個空間還必須添加對 System.ServiceModel System.ServiceModel.Web 這兩個庫文件的引用。 參考實(shí)體類:Customer
public class Customer
{ public int Unid { get; set; } public string CustomerName { get; set; } }
DataContractJsonSerializer 將對象序列化為 JavaScript 對象表示法 (JSON),并將 JSON 數(shù)據(jù)反序列化為對象。無法繼承此類。 其中有個方法WriteObject,它的功能定義為:將對象序列化為 JavaScript 對象表示法 (JSON) 文檔 它有三個方法重載,其中一個為:
public override void WriteObject(Stream stream,Object graph)
它的功能描述這:將指定對象序列化為 JavaScript 對象表示法 (JSON) 數(shù)據(jù),并將生成的 JSON 寫入流中 public string ToJson(Customer customer)
{ DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(Customer)); MemoryStream ms=new MemoryStream(); ds.WriteObject(ms, customer); string strReturn=Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return strReturn; }
創(chuàng)建類實(shí)例,通過它的WriteObject方法來向流寫入序列化的對象,再把流寫入到字符串中。就可以得到JSON對象。 測試一下: Customer cc = new Customer {Unid=1,CustomerName="John" };
string strJson = ToJson(cc); Console.WriteLine(strJson);
結(jié)果為:{"CustomerName":"John","Unid":1} (二)反序列化 ReadObject方法,其描述為:反序列化 JSON(JavaScript 對象表示法)數(shù)據(jù),并返回反序列化的對象。 它有很多重載,現(xiàn)在通過一種: public override Object ReadObject(Stream stream) 它從流中得到反序列化的對象。 public object FromJson(string strJson)
{ DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(Customer)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson)); return ds.ReadObject(ms); }
測試:
string strJson="{\"CustomerName\":\"John\",\"Unid\":1}";
Customer c=FromJson(strJson) as Customer; Console.WriteLine(c.Unid+" "+c.CustomerName);
(三)通過泛型方法對兩者進(jìn)行修改 為了適應(yīng)多類型實(shí)例的序列化與反序列化,通過泛型方法來實(shí)現(xiàn)。 public string ToJson<T>(T t)
{ DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(); ds.WriteObject(ms, t); string strReturn = Encoding.UTF8.GetString(ms.ToArray()); ms.Close(); return strReturn; } public T FromJson<T>(string strJson) where T:class { DataContractJsonSerializer ds = new DataContractJsonSerializer(typeof(T)); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson)); return ds.ReadObject(ms) as T; }
測試: Customer cc = new Customer {Unid=1,CustomerName="John" };
string strJsons = ToJson<Customer>(cc); Console.WriteLine(strJsons); string strJson="{\"CustomerName\":\"John\",\"Unid\":1}"; Customer c = FromJson<Customer>(strJson); Console.WriteLine(c.Unid+" "+c.CustomerName); |
|
來自: 修行的嘟嘟 > 《軟件開發(fā)》