ASP.NET中JSON的序列化和還原序列化

來源:互聯網
上載者:User
導讀: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序列化和還原序列化的代碼:

1:使用系統;

2:使用System.Collections.Generic;

3:使用System.Linq的;

4:使用的System.Web;

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

6:使用System.IO;

7:使用System.Text;

8:

9:/// <摘要>

10:/// JSON序列化和還原序列化輔助類

11:/// </摘要>

12:公用類JsonHelper

13:{

14:/// <摘要>

15:/// JSON序列化

16:/// </摘要>

17:公用靜態字串JsonSerializer <T>(T T)

18:{

19:DataContractJsonSerializer SER =新DataContractJsonSerializer(typeof運算(T));

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

21:ser.WriteObject(MS,T);

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

23:ms.Close();

24:返回jsonString;

25:}

26:

27:/// <摘要>

28:/// JSON還原序列化

29:/// </摘要>

30:公用靜態牛逼JsonDeserialize <T>(串jsonString)

31:{

32:DataContractJsonSerializer SER =新DataContractJsonSerializer(typeof運算(T));

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

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

35:返回OBJ;

36:}

37:}

序列化示範:

簡單對象的人:

1:公用類Person

2:{

3:公用字串名稱{; 組; }

4:公眾詮釋年齡{搞定; 組; }

5:}

序列化為JSON字串:

1:保護無效的Page_Load(對象寄件者,EventArgs的發送)

2:{

3:人p =新的Person();

4:p.Name =“張三”;

5:p.Age = 28;

6:

7:字串jsonString = JsonHelper.JsonSerializer <人>(P);

8:回複於(jsonString);

9:}

輸出結果:

{“時代”:28日,“名”:“張三”}

還原序列化示範:

1:保護無效的Page_Load(對象寄件者,EventArgs的發送)

2:{

3:字串jsonString =“{\”年齡\“:28日,\”名稱\“:\”張三\“}”;

4人P = JsonHelper.JsonDeserialize <人>(jsonString);

5:}

運行結果:

ASP.NET中的JSON序列化和還原序列化還可以使用的JavaScriptSerializer,在System.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:{

3:公用字串名稱{; 組; }

4:公眾詮釋年齡{搞定; 組; }

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

6:}

1:人p =新的Person();

2:p.Name =“張三”;

3:p.Age = 28;

4:p.LastLoginTime = DateTime.Now;

5:

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

序列化結果:

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

1.在後台使用Regex對其替換處理修改JsonHelper:

1:使用系統;

2:使用System.Collections.Generic;

3:使用System.Linq的;

4:使用的System.Web;

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

6:使用System.IO;

7:使用System.Text;

8:使用System.Text.RegularExpressions;

9:

10:/// <摘要>

11:/// JSON序列化和還原序列化輔助類

12:/// </摘要>

13:公用類JsonHelper

14:{

15:/// <摘要>

16:/// JSON序列化

17:/// </摘要>

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

19:{

20:DataContractJsonSerializer SER =新DataContractJsonSerializer(typeof運算(T));

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

22:ser.WriteObject(MS,T);

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

24:ms.Close();

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

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

27:MatchEvaluator matchEvaluator =新MatchEvaluator(ConvertJsonDateToDateString);

28:Regex章=新的Regex(P);

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

30:返回jsonString;

31:}

32:

33:/// <摘要>

34:/// JSON還原序列化

35:/// </摘要>

36:公用靜態牛逼JsonDeserialize <T>(串jsonString)

37:{

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

39:串P = @“\ D {4} - \ d {2} - \ d {2} \ S \ D {2}:\ D {2}:\ D {2}”;

40:MatchEvaluator matchEvaluator =新MatchEvaluator(ConvertDateStringToJsonDate);

41:Regex章=新的Regex(P);

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

43:DataContractJsonSerializer SER =新DataContractJsonSerializer(typeof運算(T));

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

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

46:返回OBJ;

47:}

48:

49:/// <摘要>

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

51:/// </摘要>

52:私人靜態字串ConvertJsonDateToDateString(賽米)

53:{

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

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

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

57:DT = dt.ToLocalTime();

58:結果= dt.ToString(“YYYY-MM-DD HH:MM:SS”);

59:返回結果;

60:}

61:

62:/// <摘要>

63:///將時間字串轉為Json的時間

64:/// </摘要>

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

66:{

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

68:DateTime的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:返回結果;

73:}

74:}

序列化示範:

1:人p =新的Person();

2:p.Name =“張三”;

3:p.Age = 28;

4:p.LastLoginTime = DateTime.Now;

5:

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

運行結果:

{“時代”:28日,“LastLoginTime”:“2011-01-09一點○○分56秒”,“姓名”:“張三”}

還原序列化示範:

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

P = JsonHelper.JsonDeserialize <人>(JSON);

運行結果:

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

2.利用JavaScript的處理

1:功能ChangeDateFormat(jsondate){

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

3:如果(jsondate.indexOf(“+”)> 0){

4:jsondate = jsondate.substring(0,jsondate.indexOf(“+”));

5:}

6:否則如果(jsondate.indexOf(“ - ”)> 0){

7:jsondate = jsondate.substring(0,jsondate.indexOf(“ - ”));

8:}

9:

10:VAR日期=新的日期(parseInt函數(jsondate,10));

11:無功一個月= date.getMonth()+ 1 <10?“0”+(date.getMonth()+ 1):date.getMonth()+ 1;

12:VAR的currentdate = date.getDate()<10?“0”+ date.getDate():date.getDate();

13:返回date.getFullYear()+“ - ”+月+“ - ”+的currentdate;

14:}

簡單示範:

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

結果:

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

在JSON資料中,所有的集合,字典和數組都表示為數組。

名單<T>序列化:

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

2:{

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

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

5:};

6:

7:字串jsonString = JsonHelper.JsonSerializer <名單<人>>(名單);

序列化結果:

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

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

1:詞典<字串,字串> DIC =新詞典<字串,字串>();

2:dic.Add(“姓名”,“張三”);

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

4:

5:字串jsonString = JsonHelper.JsonSerializer <詞典<字串,字串>>(DIC);

序列化結果:

1:“[{\”鍵\“:\”名稱\“,\”價值\“:\”張三\“},{\”鍵\“:\”年齡\“,\”價值\“: \“28 \”}]“

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.