ASP.NET AJAX框架编程之JSON序列化剖析

2013 年 10 月 19 日3060

  作者:朱先忠

  ASP.NET AJAX(最初代码名为“ATLAS”)框架,作为重点支持ASP.NET开发平台的开源Ajax框架在它一出世时就受到广大.NET开发人员的青睐。在本文中,我们将专注于分析ASP.NET AJAX编程中服务器与客户端通信过程中的数据存储形式的问题。具体地说,我们将探讨一个实现序列化与反序列化的服务器端对象—JavaScriptSerializer。

  一、JSON简介

  在正式讨论JSON格式之前,首先让我们简要回忆一下XML。XML是“可扩展的标记语言”的简称,它提供了定义Web中一系列数据传输协议的方式,是文本型的,被人们誉为“完全开发Internet和Web潜力的理想方式”。

  那么,为什么ASP.NET AJAX中还要引入JSON呢?还是让我们先来观察一下例子吧。比如当前Web页面将从后台载入一些通讯录的信息,这些信息如果写成XML,可能是如下形式:

<contact>
<friend>
<name>Michael</name>
<email>17bity@gmail.com</email>
<homepage>http://http://www.zjjv.com//</homepage>
</friend>
<friend>
<name>John</name>
<email>john@gmail.com</email>
<homepage>http://http://www.zjjv.com//</homepage>
</friend>
<friend>
<name>Peggy</name>
<email>peggy@gmail.com</email>
<homepage>http://http://www.zjjv.com//</homepage>
</friend>
</contact>

  而写成JSON形式,则会是:

[
friend: {
name:"Michael",
email:"17bity@gmail.com",
homepage:"http://http://www.zjjv.com//"
},
friend: {
name:"John",
email:"john@gmail.com",
homepage:"http://http://www.zjjv.com//"
},
friend: {
name:"Peggy",
email:"peggy@gmail.com",
homepage:"http://http://www.zjjv.com//"
}
]

  相比之下,后面JSON表达方式明显更为简洁。其实,我们最关心的并不只是表达上的简单性,最重要的是如何简化DOM的解析。因为不同的浏览器中XML/SOAP解释器的实现是有所不同的,所以,解释相同的XML和SOAP格式的数据未必会一定得到一致的结果。为此,ASP.NET AJAX中特地引入了更为轻量级的JSON格式,并创建了一致的JSON解析器,再加上JavaScript本身就支持以JSON方式创建对象,所以,这一切都显然十分流畅自然和水到渠成。

  JSON,即JavaScript对象标志,如今已经成为JavaScript内置支持的数据格式,它实现了比以前的XML和SOAP更为有效的网络数据传送方式。简言之,JSON是一种基本的把对象序列化成轻量级字符串的方式,而字符串数据可以轻松地通过网络进行数据传输而且毫不失真。我们不妨再来考虑下面简单的C#类:

public class User
{
string FirstName;
string LastName;
}

  现在,假设定义了上面对象的如下实例:

User usr = new User();
usr.FirstName = "John"
usr.LastName = "Smith";

  当把上面数据序列化成JSON格式的文本时,最终会得到如下所示的形式:

{ FirstName : "John"
LastName : "Smith" }

  借助于JavaScript内置支持的方法eval()或者ASP.NET AJAX提供的Sys.Serialization.JavaScriptSerializer类,我们可以在JavaScript代码中实现JSON文本串的反序列化(即再还原成最初的对象形式)。

  在本文中,我们将专注于讨论使用ASP.NET AJAX提供的特有类来实现把一个JavaScript对象序列化为文本串,然后发送到服务器端,以及如何使用服务器端类JavaScriptSerializer把JSON文本串反序列化成原始的对象数据。

本文导航:

·JSON简介
·实现序列反序列化的关键
·序列反序列化举例

·关于客户端JavaScriptSerializer对象
·小结

0 0