當前位置:成語大全網 - 書法字典 - 中JSON序列化和反序列化的幾種方法。網

中JSON序列化和反序列化的幾種方法。網

壹、JSON是什麽?

JSON (JavaScript Object Notation,JS Object Notation)是壹種輕量級的數據交換格式。它基於ECMAScript(歐洲計算機協會制定的js規範)的子集,使用完全獨立於編程語言的文本格式來存儲和表示數據。簡單清晰的層次結構使JSON成為理想的數據交換語言。便於人們讀寫,也便於機器分析和生成,有效提高網絡傳輸效率。

它是JavaScript用來處理數據的壹種格式。大部分用來處理JavaScript和web服務器之間的數據交換,後臺web服務器的數據傳到前臺,再由JavaScript處理,比如ajax。它是壹種獨立於語言和平臺的輕量級數據交換格式。

二、JSON語法

1,JSON語法規則

在JS語言中,壹切都是對象。所以JSON可以表示任何支持的類型,比如字符串、數字、對象、數組等等。但是對象和數組是兩種特殊且常用的類型:

對象被表示為鍵值對。

數據用逗號分隔。

大括號保存對象。

方括號保存數組

Object:在JS中,object是花括號包裹的內容,數據結構是{key 1: value 1,key 2: value 2,...}.在面向對象語言中,key是對象的屬性,value是對應的值。鍵名可以用整數和字符串來表示。值的類型可以是任何類型。

{ "名字":"布雷特","姓氏":"麥克勞克林" }

Array:在JS中,array是方括號[]中包裹的內容,數據結構是["的索引結構。net”、“JavaScript”、“Python”,...].在JS中,數組是壹種特殊的數據類型,它也可以像對象壹樣使用鍵值對,但索引的使用仍然要多得多。類似地,值的類型可以是任何類型。

{

“人”:[{

“名”:“張”,

"姓氏":"三"

},

{

“名”:“李”,

"姓氏":" si "

}

]

}

2.JSON鍵/值對

JSON鍵值對是保存JSON對象的壹種方式,它們的編寫方式與JSON對象相同。鍵/值對中的鍵名寫在前面,用雙引號"",用冒號隔開:然後後面是值:{"firstName": "Json"},很好理解,等價於這個JavaScript語句:{firstName: "Json"}。

3.JSON和JS對象之間的關系

JSON對象之間的關系可以這樣理解:JSON是JSON對象的字符串表示,用文本表示壹個JS對象的信息,本質上是壹個字符串。比如:

var obj = {a:'妳好',b:'世界' };//這是壹個對象。註意,鍵名也可以用引號括起來。

var json = '{"a": "Hello "," b ":" World " } ';//這是壹個JSON字符串,本質上是壹個字符串。

4.JSON和JS對象是相互轉換的。

要將對象轉換為JSON字符串,請使用JSON.stringify()方法:

var JSON = JSON . stringify({ a:' Hello ',b:' World ' });//結果是' {"a": "Hello "," b": "World"} '

要實現從JSON到object的轉換,使用JSON.parse()方法:

var obj = JSON.parse('{"a": "Hello "," b ":" World " } ');//結果是{a:'妳好',b:'世界' }

第三,Json序列化模式

1、JavaScript序列化程序

使用JavaScriptSerializer方法需要引入的名稱空間在程序集System.Web.Extensions.dll中。

使用系統。Web.Script .序列化;

PS:未序列化的屬性可以用[ScriptIgnore]標記。

代碼:

公共操作結果GetJsonDemo()

{

//對象

data model model = new data model();

模型。ID = 1;

模型。Name = "張三";

模型。性別= "女性";

模型。年齡= 18;

//對象序列化Json

字符串strJson= JsonHelper。ObjectToJson(模型);

//Json反序列化對象

model= JsonHelper。JsonToObject & lt數據模型& gt(str JSON);

String strContent = "對象序列化:"+strJson+"\n"+

"反序列化值:"+model . name+" "+model . sex+" "+model . age;

返回內容(str Content);

}

JsonHelper:

公共類JsonHelper

{

#region第壹個JavaScriptSerializer

//使用JavaScriptSerializer時需要引入的命名空間,它在程序集System.Web.Extensions.dll中。

//使用系統。Web.Script .序列化;

//註意:可以使用[ScriptIgnore]來標記未序列化的屬性。

///& lt;總結& gt

///序列化

///& lt;/summary & gt;

///& lt;param name = " obj " & gt& lt/param & gt;

///& lt;returns & gt& lt/returns & gt;

公共靜態字符串ObjectToJson(object obj)

{

JavaScript serializer jsonSerialize = new JavaScript serializer();

返回jsonSerialize。serialize(obj);

}

///& lt;總結& gt

///反序列化

///& lt;/summary & gt;

///& lt;typeparam name = " T " & gt& lt/type param & gt;

///& lt;param name = " strJson " & gt& lt/param & gt;

///& lt;returns & gt& lt/returns & gt;

公共靜態T JsonToObject & ltT & gt(字符串strJson)

{

JavaScript serializer jsonSerialize = new JavaScript serializer();

//jsonSerialize。反序列化& lt動態& gt(str JSON);//價值模型[" Name "];若要使用索引獲取值,不能使用對象。財產。

返回jsonSerialize。反序列化& ltT & gt(str JSON);

}

#結束區域

}

結果:

2、JSON.NET

使用Newtonsoft的命名空間。使用Json.NET類庫需要介紹的Json

PS:沒有序列化的屬性可以用【JsonIgnore】標記。

代碼:

公共操作結果GetJsonDemo()

{

//對象

data model model = new data model();

模型。ID = 2;

模型。Name = " LiSi

模型。性別= "男性";

模型。年齡= 20;

//對象序列化Json

字符串strJson = JsonHelper。ObjectToJson(模型);

//Json反序列化對象

model = JsonHelper。JsonToObject & lt數據模型& gt(str JSON);

String strContent = "對象序列化:"+strJson+"\n"+

"反序列化值:"+model . name+" "+model . sex+" "+model . age;

返回內容(str Content);

}

JsonHelper:

///& lt;總結& gt

/// Json幫助類

///& lt;/summary & gt;

公共類JsonHelper

{

#地區第二JSON.NET

//通過Newtonsoft使用命名空間。Json.NET類庫中需要引入的Json

//註意:可以使用[JsonIgnore]來標記未序列化的屬性。

///& lt;總結& gt

///序列化

///& lt;/summary & gt;

///& lt;param name = " obj " & gt& lt/param & gt;

///& lt;returns & gt& lt/returns & gt;

公共靜態字符串ObjectToJson(object obj)

{

返回JsonConvert。serialize object(obj);

}

///& lt;總結& gt

///反序列化

///& lt;/summary & gt;

///& lt;typeparam name = " T " & gt& lt/type param & gt;

///& lt;param name = " strJson " & gt& lt/param & gt;

///& lt;returns & gt& lt/returns & gt;

公共靜態T JsonToObject & ltT & gt(字符串strJson)

{

返回JsonConvert。反序列化對象& ltT & gt(str JSON);

}

#結束區域

}

結果:

3、DataContractJsonSerializer

使用DataContractJsonSerializer時需要引入的命名空間在System.Runtime.Serialization.dll。

使用系統。Runtime . Serialization.Json

必須使用DataContractJsonSerializer為序列化和反序列化添加實體中的協定[DataMember]和[DataContract],但對於其他兩種方法,可以添加或不添加它們。

PS:未序列化的屬性可以用[IgnoreDataMember]標記。

代碼:

公共操作結果GetJsonDemo()

{

//對象

data model model = new data model();

模型。ID = 3;

模型。Name = "吳王";

模型。性別= "女性";

模型。年齡= 22;

//對象序列化Json

字符串strJson = JsonHelper。ObjectToJson(模型);

//Json反序列化對象

model = JsonHelper。JsonToObject & lt數據模型& gt(str JSON);

String strContent = "對象序列化:"+strJson+"\n"+

"反序列化值:"+model . name+" "+model . sex+" "+model . age;

返回內容(str Content);

}

JsonHelper:

///& lt;總結& gt

/// Json幫助類

///& lt;/summary & gt;

公共類JsonHelper

{

#region第三個DataContractJsonSerializer

//使用DataContractJsonSerializer時需要引入的命名空間在System.Runtime.Serialization.dll。

//使用系統。Runtime . Serialization.Json

//註意:可以使用[IgnoreDataMember]來標記未序列化的屬性。

//必須使用DataContractJsonSerializer添加實體中的協定[DataMember]和[DataContract]以進行序列化和反序列化。

//對於另外兩個方法,不需要添加,但是可以做。

///& lt;總結& gt

///序列化

///& lt;/summary & gt;

///& lt;param name = " obj " & gt& lt/param & gt;

///& lt;returns & gt& lt/returns & gt;

公共靜態字符串ObjectToJson(object obj)

{

使用(memory stream stream = new memory stream())

{

DataContractJsonSerializer jsonSerialize = new DataContractJsonSerializer(obj。GetType());

jsonSerialize。WriteObject(stream,obj);

返回編碼。UTF8.GetString(流。ToArray());

}

}

///& lt;總結& gt

///反序列化

///& lt;/summary & gt;

///& lt;typeparam name = " T " & gt& lt/type param & gt;

///& lt;param name = " strJson " & gt& lt/param & gt;

///& lt;returns & gt& lt/returns & gt;

公共靜態T JsonToObject & ltT & gt(字符串strJson)

{

使用(memory stream stream = new memory stream(Encoding。UTF8.GetBytes(strJson)))

{

DataContractJsonSerializer jsonSerialize = new DataContractJsonSerializer(type of(T));

返回(T)jsonSerialize。ReadObject(流);

}

}

#結束區域

}

結果:

PS:數據模型

[數據合同]

公共類數據模型

{

[數據成員]

public int ID { get設置;}

[數據成員]

公共字符串名稱{ get設置;}

[數據成員]

公共字符串性{ get設置;}

[數據成員]

public int Age { get設置;}

}

第四,總結

序列化1和JSON有三種方法。

JavaScriptSerializer類

JSON.NET類庫

DataContractJsonSerializer類

2.嘗試使用JSON.NET(開源)進行序列化和反序列化,性能良好。