深圳嘉华:ASP.NET中 JSON数据格式处理方法

JSON(JavaScript Object Notation),一种专门为浏览器中的网页上运行的JavaScript代码而设计的一种数据格式,采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这里将由北大青鸟深圳嘉华老师来介绍一下ASP.NET中 JSON数据格式处理方法。

JSON(JavaScript Object Notation)具有易于人阅读和编写的特性,同时也易于机器解析和生成(一般用于提升网络传输速率),这些特性使JSON成为理想的数据交换语言。下面将介绍 ASP.NET中JSON的序列化和反序列化的处理,在序列化和反序列化对日期时间、集 合、字典的处理。

一、JSON简介

JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式。

JSON是“名值对”的集合。结构由大括号'{}',中括号'',逗号',',冒号':',双引号'“”'组成,包含的数据类型有Object,Number,Boolean,String,Array, NULL等。

JSON具有以下的形式:

对象(Object)

是一个无序的“名称-值对”集合,一个对象以”{”开始,”}”结束。每个“名”后跟着一个”:”,多个“名值对”由逗号分隔。如:

var user={"name":"张三","gender":"男","birthday":"1980-8-8"}

数组(Array)

是值的有序集合,一个数组以“[”开始,以“]”结束,值之间使用“,”分隔。如:

var userlist=[{"user":{"name":"张三","gender":"男","birthday":"1980-8-8"}}, {"user":{"name":"李四","gender":"男","birthday":"1985-5-8"}}];

字符串(String)

是由双引号包围的任意数量的Unicode字符的集合,使用反斜线转义。

二、对JSON数据进行处理

l可以使用
DataContractJsonSerializer类将类型实例序列化为JSON字符串,并将JSON字符串反序列化为类型实例。


DataContractJsonSerializer在
System.Runtime.Serialization.Json命名空间下,.NET Framework 3.5包含在
System.ServiceModel.Web.dll中,需要添加对其的引用;.NET Framework 4在
System.Runtime.Serialization中。

利用
DataContractJsonSerializer的代码:

1: using System;

2: using System.Collections.Generic;

3: using System.Linq;

4: using System.Web;

5: using System.Runtime.Serialization.Json;

6: using System.IO;

7: using System.Text;

8:

9: ///

10: /// JSON序列化和反序列化辅助类

11: ///

12: public class JsonHelper

13: {

14: ///

15: /// JSON序列化

16: ///

17: public static string JsonSerializer(T t)

18: {

19: DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));

20: MemoryStream ms = new MemoryStream;

21: ser.WriteObject(ms, t);

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

23: ms.Close;

24: return jsonString;

25: }

26:

27: ///

28: /// JSON反序列化

29: ///

30: public static T JsonDeserialize(string jsonString)

31: {

32: DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));

33: MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));

34: T obj = (T)ser.ReadObject(ms);

35: return obj;

36: }

37: }

序列化Demo(简单对象Person):

1: public class Person

2: {

3: public string Name { get; set; }

4: public int Age { get; set; }

5: }

序列化为JSON字符串:

1: protected void Page_Load(object sender, EventArgs e)

2: {

3: Person p = new Person;

4: p.Name = "张三";

5: p.Age = 28;

6:

7: string jsonString = JsonHelper.JsonSerializer(p);

8: Response.Write(jsonString);

9: }

输出结果:

{"Age":28,"Name":"张三"}

反序列化Demo:

1: protected void Page_Load(object sender, EventArgs e)

2: {

3: string jsonString = "{\"Age\":28,\"Name\":\"张三\"}";

4: Person p = JsonHelper.JsonDeserialize(jsonString);

5: }

lASP.NET中的JSON序列化和反序列化还可以使用JavaScriptSerializer,在
System.Web.Script.Serializatioin命名空间下,需引用
System.Web.Extensions.dll.

用心办好学,深圳嘉华邀您加入互联网队伍!

微信号:jhzyjy(长按复制)

我们专注IT教育,欢迎你前来咨询!