Json和其序列化和還原序列化
最近經常在說Json傳值,Json序列化,什麼是Json?什麼又是Json的序列化和還原序列化?
什麼是 JSON ?
大家是否知道Json的全稱?—JavaScript Object Notation(JavaScript 物件標記法),說白了Json就是一種字串,一種帶有格式的字串,一種可讀性很強,操作方便的字串。因為Json字串儲存資訊的方式和hashtable,Dictionary一樣都是索引值對的形式。
Json的結構很簡單,也很複雜。簡單是因為Json的結構只有兩種:對象和數組。
對象和數組大家都很熟悉,在JS中對象的表示為“{}”括起來的內容,資料結構為 {key:value,key:value,…}的索引值對的結構,在物件導向的語言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,取值方法為 “對象.key” 擷取屬性值,這個屬性值的類型可以是 數字、字串、數組、對象幾種。
數組:數組在js中是中括弧“[]”括起來的內容,資料結構為 [” 數值1”,”數值2”,”數值3”,…],取值方式和其他語言中一樣,使用索引擷取,欄位值的類型和上面對象的屬性值一樣,可以是 數字、字串、數組、對象幾種。
說Json結構複雜是因為:Json可以通過對象、數組這2種結構的組合,從而形成任何複雜的資料結構。
Json執行個體:
{ "學生": [ {"姓名":"小明","年齡":23}, {"姓名":"大憨","年齡":24} ] }
上面這個Json對象,包含一個名為學生的數組,數組中的每條記錄又是一個Json對象。對象有兩個屬性分別為:姓名和年齡。這就是一個既包含數組也包含對象的Json執行個體
說道Json是作為一種儲存和交換文本資訊的文法,這使我不得不想到XML。因為XML在這方面也是高手。他們有什麼異同呢?
相同之處,他們都是純文字,且有一定的格式都夠儲存傳輸資料,可以用JS來對其進行解析。不同之處在於,Json沒有結束標籤,格式相對簡單,能夠使用內建的 JavaScript eval() 方法進行解析。
除了上述之外,JSON和XML還有另外一個很大的區別在於有效資料率。JSON作為資料包格式傳輸的時候具有更高的效率,這是因為JSON不像XML那樣需要有嚴格的閉合標籤,這就讓有效資料量與總資料包比大大提升,從而減少同等資料流量的情況下,網路的傳輸壓力 。
Json的序列化和還原序列化
這裡的序列化主要就是為了傳輸方便,將要傳輸的對象序列化為二進位的資料流,效率極高,接收時通過還原序列化轉化成對象,從而達到一個傳輸的效果。簡單點來說,序列化就是將對象轉換成Json格式的字串,還原序列化就是逆過程,將Json串轉換成對象。
執行個體
JS代碼:建立學生對象數組
var stucheck = [ {"姓名":"小明","年齡":23},{"姓名":"大憨","年齡":24}] //用stringify函數將對象stucheck序列化,提交到後台,增加分享記錄 $.ajax({ type: "POST", url: "/VideoPlayer/AddVideoShareRecordList", data: { stuList: JSON.stringify(stucheck) }, success: function (data) { if (data == true) { alert("分享視頻成功!"); } else { alert("分享失敗,請檢查網路!"); } } });
後台解析:
public bool AddStuRecordList() {//擷取Json串 string stuList = Request["stuList"];//聲明一個學生的實體集合 List stuAddList = new List(); //聲明一個servializer 類用來完成Json的還原序列化 JavaScriptSerializer servializer = new JavaScriptSerializer();//完成Json的還原序列化 stuAddList = servializer.Deserialize>(stuList); bool isok = AddRecordList(stuAddList); return isok; }
注意:JS中的對象和後台中的對象應該保持一致,才能完全轉換。在後台進行序列化和還原序列化需要引入外掛程式,JavaScriptSerializer 或者 Newtonsoft.Json.JsonConvert,添加引用即可。
以上就是對Json的一些簡單瞭解,不正確的地方請指出。