首頁  >  文章  >  後端開發  >  ASP.NET中JSON的序列化與反序列化

ASP.NET中JSON的序列化與反序列化

巴扎黑
巴扎黑原創
2016-12-20 09:12:561258瀏覽

導讀:JSON是專門為瀏覽器中的網頁上運行的JavaScript的程式碼而設計的一種資料格式在網站應用中使用JSON的場景越來越多,本文介紹ASP.NET中JSON的序列化和反序列化,主要對JSON的簡單介紹,ASP.NET如何序列化和反序列化的處理,在序列化和反序列化對日期時間,集合,字典的處理。

一,JSON簡介

JSON(JavaScript物件符號,JavaScript的物件表示法)是一種輕量級的資料交換格式。

JSON是“名值對”的集合結構由大括號“{}”中括號“[]”,逗號“,”,冒號。 “:”雙引號'“,”'組成,包含的資料類型有對象,數字,布林值,字串數組,NULL等。

JSON有以下的形式:

物件(物件)是一個無序的「名值對」集合,一個物件以「{」開始,「}」結束每個「名」後跟著一個「:」,多個“名值對”由逗號分隔如:

VAR用戶= {“名”:“張三”,“性別”:“男”,“生日”:“1980年8月8日”}

數組(陣列)是值的有序集合,一個數組以“[”開始,以“]”結束,值之間使用“,”分隔如:

VAR用戶列表= [{“用戶”:{“名”:“張三”,“性別”:“男”,“生日”:“1980年8月8日”}},{“用戶”:{“名” “李四”,“性別”:“男”,“生日”:“1985年5月8日”}}];

字串(字串)是由雙引號包圍的任意數量的的Unicode字元的集合,使用反斜線轉義。

二,對JSON資料進行序列化和反序列化

可以使用DataContractJsonSerializer類別將類型實例序列化為JSON字串,並將JSON字串反序列化為類型實例。 DataContractJsonSerializer在System.Runtime.Serialization.Json命名空間下,.NET Framework 3.5的包含在System.ServiceModel.Web .dll檔案中,需要新增對其的參考; .NET框架4在System.Runtime.Serialization中。

利用DataContractJsonSerializer序列化與反序列化的程式碼:

利用DataContractJsonSerializer序列化與反序列化的程式碼:

使用DataContractJsonSerializer序列化與反序列化的程式碼:

   1:使用系統;

   2:使用System.Collections.Generic;

   2:使用System.Collections.Generic;

 ;

   5:使用System.Runtime.Serialization.Json;

   6:使用System.IO;

   7:使用System.Text;

摘要

8   10: /// JSON序列化與反序列化輔助類

  11:/// 摘要>

  12:公共類別JsonHelper

  13:{

// JSON序列化

  16:/// 摘要>

  17:公共靜態字串JsonSerializer (T T)

  18:{

  19:DataContractsonStract 19: ));

  20:MemoryStream的毫秒=新的MemoryStream();

  21:ser.WriteObject(MS,T);

  22:jsonString = Encoding.UTF8.Toms(

  22:jsonString = Encoding.UTF8.Toms) ;

  23:ms.Close();

  24:回傳jsonString;

  25:}

  26: 

29:///摘要>

  30:公:MemoryStream的毫秒=新的MemoryStream(Encoding.UTF8.GetBytes(jsonString));

  34:T已OBJ =(T)ser.ReadObject(MS);

  35:回傳

  37:}

序列化示範:

簡單物件的人:

   1:公用類別Person

   2:{搞定; 組; }

   5:}

序列化為JSON字串:

   1:保護無效的Page_Load(物件發送者, 的Person();

   4:p.Name =「張三」;

   5:p.Age = 28;

   6: 

 );

   8:回覆於(jsonString);

   9:}

輸出結果:

{「時代」:28日,「名稱」:「張三」}

{「時代」:28日,「名稱」:「張三」}

序列化示範保護無效的Page_Load(物件寄件人,EventArgs的發送)

   2:{

   3:字串jsonString =「{」年齡「:28日,」名稱「:」張三「}」;

   4人P = JsonHelper.JsonDeserialize (jsonString);

   5:}

運行結果:

ASP.NET中的JSON序列化和反序列化還可以使用的SScript.NET,Web. Script.Serializatioin命名空間下,需引用System.Web.Extensions.dll。也可以使用JSON.NET。

三,JSON序列化和反序列化日期時間的處理

JSON格式不直接支援日期和時間.DateTime值值顯示為「/日期(700000 + 0500)/」形式的JSON字串,其中第一個數字(在提供的範例中為700000)是GMT時區中自1970年1月1日午夜以來按正常時間(非夏令時)經過的毫秒數。該數字可以是負數,以表示之前的時間。範例中包含「0500」的部分可選,它指示該時間屬於當地類型,即它在反序列化時應轉換為本地時區。如果沒有該部分,則會將時間反序列化為UTC。

修改個人類別,新增LastLoginTime:

   1:公共類別Person

   2:{

   5 :公共的DateTime LastLoginTime {搞定; 組; }

   6:}

   1:人類p =新的Person();

   2:p.Name =「張三」; 28;

   4:p.LastLoginTime = DateTime.Now;

   5: 

   6:字符串jsonString = JsonHelper.JsonSerializer (P);

序列化結果:

{“時代”:28日,“LastLoginTime”:“ /日期(1294499956278 + 0800) /”,“姓名”:“張三”}

1.在後台使用正則表達式對其替換處理修改JsonHelper:

 使用 1: 使用系統;

   2:使用System.Collections.Generic;

   3:使用System.Linq的;

   4:使用的System.Web;

🠎

   4:使用的System.Web;

.🠎.使用System .IO;

   7:使用System.Text;

   8:使用System.Text.RegularExpressions;

   9: 

化輔助類

  12:/// 摘要>

  13:公共類別JsonHelper

  14:{

  15:/// /// 摘要>

  18:公用靜態字串JsonSerializer (T T)

  19:{

  20:DataContractJsonSerializer SER =新DataContractJsonSerialStream(StreamStreamtype)的運算(T卷);毫秒=新的MemoryStream();

  22:ser.WriteObject(MS,T);

  23:字串jsonString = Encoding.UTF8.GetString(ms.ToArray());

  24:ms.Close(Close. );

  25://替換的Json的日期字串

  26:串P = @“ \ /日期(( D +) + D + )\ / ”;

  27:MatchEvaluator ConvertJsonDateToDateString);

  28:正規表示式章=新的正規表示式(P);

  29:jsonString = reg.Replace(jsonString,matchEvaluator); 32: 

  33:///

  34:/// JSON反序列化

  35:///摘要>

¡

  37:{

  38://將「YYYY-MM-DD HH:MM:SS」格式的字串轉為「 /日期(1294499956278 + 0800) /」格式

D {4} - d {2} - d {2} S D {2}: D {2}: D {2}”;

  40:MatchEvaluator matchEvaluator =新MatchEvaluator(ConvertDateStringToJsonDate);

正式表達式 41:章=新的正規表示式(P);

  42:jsonString = reg.Replace(jsonString,matchEvaluator);

  43:DataContractJsonSerializer SER =新DataContractJsonSerializer  43:DataContractJsonSerializer SER =新DataContractJsonSerializer(StreamStreamStreamMStreamMem)(StreamcM)cwory5; =新的MemoryStream(Encoding.UTF8.GetBytes(jsonString));

  45:T已OBJ =(T)ser.ReadObject(MS);

  46:回傳OBJ;

  49:///

  50:///將Json的序列化的時間由/日期(1294499956278 + 0800)轉為字串

私人靜態字串ConvertJsonDateToDateString(賽米)

  53:{

  54:字串結果=的String.Empty;

  55:DateTime的DT =新日期時間(1970,1,1970,1,1970,1,1970,1,1970,1,1970,1,1970,1,1970,1,1970,1,1970,1,1970,1,1970,1,1970,1,1970,19);

  56:DT = dt.AddMilliseconds(long.Parse(m.Groups [1] .value的));

  57:DT = dt.ToLocalTime();

  57:DT = dt.ToLocalTime();

  58:結果= YdtYString( MM-DD HH:MM:SS”);

  59:回傳結果;

  60:}

  61: 

  62:///

Json的時間

  64:/// 摘要>

  65:私人靜態字串ConvertDateStringToJsonDate(賽米)

  66:{

  67:字符串結果=68.的DT = DateTime.Parse(m.Groups [0] .value的);

  69:DT = dt.ToUniversalTime();

  70:時間跨度TS = DT - DateTime.Parse(“1970-01-01 ”);

  71:結果=的String.Format(“ \ /日期({0} +0800)\ /”,ts.TotalMilliseconds);

  72:回傳結果;

 }

序列化示範:

   1:人類p =新的Person();

   2:p.Name =「張三」;

   3:p.Age = 28; = DateTime.Now;

   5: 

   6:字串jsonString = JsonHelper.JsonSerializer (P);

運算-09一點○○56秒”,“姓名”:“張三”}

反序列化演示:

JSON字串=“{”年齡“:28日,”LastLoginTime “:”2011-01- 09 00:30:00 “,”名稱“:”張三“}”;

P = JsonHelper.JsonDeserialize (JSON);

運行結果:

在後台替換字串適用範圍比較窄,如果考慮到全球化的有多種語言還會更麻煩。

2.利用JavaScript的處理

   1:功能ChangeDateFormat(jsondate){

   2:jsondate = jsondate.replace(“/日期(”,“”).complace(“)/”,”

   3:若(jsondate.indexOf(「+」)> 0){

   4:jsondate = jsondate.substring(0,jsondate.indexOf(「+」));

}

 . (jsondate.indexOf(「 - 」)> 0){

   7:jsondate = jsondate.substring(0,jsondate.indexOf(「 - 」));

   8:}🠎 日期🠎 =新的日期(parseInt函數(jsondate,10));

  11:無功一個月= date.getMonth()+ 1

  12:VAR的currentdate = date.getDate()

  13:返回date.getFullYear()+「 - 」+月+「 - 」+的currentdate;

  14:}

簡單示範:

ChangeDateFormat(“ /日期(1294499956278 + 0800) /”);

結果:

四,JSON序列化和反序列化集合,字典,數組的處理

和數組都表示為數組。

名單序列化:

   1:名單列表=新的List ()

   2:{

   3:新年齡的Person(){名稱=“張三”,假稱= 28},

   4:新的Person(){名稱=“李四”,年齡= 25}

   5:};

   6: 

son >>(名單);

序列化結果:

「[{」年齡「:28日,」名稱「:」張三「},{」年齡「:25,」名稱「:」李四「} ]”

字典不能直接用於JSON,字典字典轉化為JSON並不是跟原來的字典格式一致,而是形式以字典的按鍵作為名稱“密鑰”的值,以字典的值作為名稱為“值”的值。如:

   1:字典 DIC =新字典();

   2:dic.Add(「姓名」,「張三」);

   3: dic.Add(“時代”,“28”);

   4: 

   5:字串jsonString = JsonHelper.JsonSerializer >(DIC);

序列化結果:

1:「[{」鍵「:」名稱「,」價值「:」張三「},{」鍵「:」年齡「,」價值「: 「28 」}]「

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn