一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

JSON 序列化和反序列化——.net3.5自帶類庫實(shí)現(xiàn)

 修行的嘟嘟 2011-05-04

.net3.5提供了json對象序列化與反序列化的類。位置在:System.Runtime.Serialization.Json空間下。其中如果要應(yīng)用這個空間還必須添加對

System.ServiceModel

System.ServiceModel.Web

這兩個庫文件的引用。

參考實(shí)體類:Customer

public class Customer
{
   
public int Unid { getset; }
   
public string CustomerName { getset; }
}

 

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方法,其描述為:反序列化 JSONJavaScript 對象表示法)數(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;
}

 

·反序列化時通過泛型約束來指定類型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);

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美中文字幕一区在线| 东北女人的逼操的舒服吗| 欧美日本道一区二区三区| 欧美精品久久99九九| 日本少妇三级三级三级| 亚洲av一区二区三区精品| 中文日韩精品视频在线| 日韩精品日韩激情日韩综合| 日本欧美三级中文字幕| 91精品视频全国免费| 国产精品久久久久久久久久久痴汉 | 欧美色欧美亚洲日在线| 日本三区不卡高清更新二区| 亚洲精品国男人在线视频| 国产精品夜色一区二区三区不卡| 久久老熟女一区二区三区福利| 精品老司机视频在线观看| 日本三区不卡高清更新二区| 国产免费成人激情视频| 欧美日韩在线第一页日韩| 人妻少妇久久中文字幕久久| 欧美日韩一区二区综合| 69老司机精品视频在线观看| 国产亚洲精品香蕉视频播放| 国产亚洲神马午夜福利| 日韩免费国产91在线| 欧美日韩亚洲精品内裤| 经典欧美熟女激情综合网| 99国产成人免费一区二区| 国产高清视频一区不卡| av在线免费观看一区二区三区| 久七久精品视频黄色的| 五月天丁香亚洲综合网| 日本丰满大奶熟女一区二区| 日本精品免费在线观看| 欧美日韩无卡一区二区| 欧美一区二区三区十区| 免费在线播放一区二区| 日韩av亚洲一区二区三区| 国产精品一区二区日韩新区| 欧美国产日产在线观看|