详解ASP.NET AJAX客户端 |
本文标签:ASP.NET AJAX客户端 在ASP.NET AJAX中使用了JSON作为客户端与服务器端传递对象信息的方式 。因此,在ASP.NET AJAX客户端与服务器端均提供了序列化与反序列化的能力 。了解这些内容的使用方法,可以说是使用与扩展ASP.NET AJAX所必须的能力 。我们就来看一下ASP.NET AJAX中的序列化与反序列化的能力 。 一、客户端的序列化与反序列化能力: 在ASP.NET AJAX中,为客户端提供序列化能力的是Sys.Serialization.JavaScriptSerializer类的serialize静态方法 。这个方法能够将一个客户端对象序列化成为一个JSON字符串,它的使用方法非常简单 。如下:
没有过多可说的内容,可能比较“有特点”的地方就是它对于客户端Date对象的序列化操作 。如果我们调用下面的代码,会出现什么结果呢?
给ASP.NET AJAX客户端带来反序列化能力的就是Sys.Serialization.JavaScriptSerializer类的deserialize静态方法 。如下:
客户端的序列化和反序列化非常简单,我把它放在这里一并说明更像是为了让内容更加完整 。而服务器端的序列化与反序列化就不是那么轻易的了,它涉及到大量的字符串操作,也涉及到一定的自定义能力 。这才是这片文章想要着重说明的 。 ASP.NET AJAX提供的序列化和反序列化能力都是由Microsoft.Web.Script.Serialization这个命名空间下的类完成的 。不过幸运的是,他们大都是内部类,真正能够给开发人员使用的只有JavaScriptSerializer类的数个方法而已 。ASP.NET AJAX已经带给我们比较充足的序列化与反序列化的能力,我们只需要掌握它,知道它们是如何工作的,那一般也就足够了 。 不过要进入对于这些序列化与反序列化能力的了解,首先需要了解其它的两个类:JavaScriptTypeResolver和JavaScriptConverter 。 1、JavaScriptTypeResolver JavaScriptTypeResolver是一个抽象类,虽然是第一次在Atlas多个Release中出现,但是它并不是一个新鲜事物 。它的作用就相当于Atlas CTP中的IJavaScriptSerializeContext接口,甚至可以说只是换了类名和方法名(事实上,从一个接口转变为一个抽象类,这个做法让人摸不着头脑,因为现在的抽象类也不存在任何的实现) 。这个类的作用是“将一个字符串,与一个特定的类进行关联,使字符串成为那个特定类的一个标识 ” 。这个抽象类存在着两个方法: 1. String ResolveTypeId(Type):得到Type对象的标识字符串 。 可以看出,这两个方法是一对相反的操作 。他们会分别运用在序列化于反序列化操作之中 。如果对于这个类的作用还不是非常了解的话,那么可以看一下 ASP.NET AJAX中这个抽象类的一个简单实现 。那就是 Microsoft.Web.Script.Serialization.SimpleTypeResolver类 。它的代码如下:
|