详解ASP.NET AJAX客户端
创始人
2024-04-20 14:00:24
0

在ASP.NET AJAX中使用了JSON作为客户端与服务器端传递对象信息的方式。因此,在ASP.NET AJAX客户端与服务器端均提供了序列化与反序列化的能力。了解这些内容的使用方法,可以说是使用与扩展ASP.NET AJAX所必须的能力。我们就来看一下ASP.NET AJAX中的序列化与反序列化的能力。

一、客户端的序列化与反序列化能力:

在ASP.NET AJAX中,为客户端提供序列化能力的是Sys.Serialization.JavaScriptSerializer类的serialize静态方法。这个方法能够将一个客户端对象序列化成为一个JSON字符串,它的使用方法非常简单。如下:

  1. var jsonStr = Sys.Serialization.JavaScriptSerializer.serialize(obj); 

没有过多可说的内容,可能比较“有特点”的地方就是它对于客户端Date对象的序列化操作。如果我们调用下面的代码,会出现什么结果呢?

  1. var jsonStr = Sys.Serialization.JavaScriptSerializer.serialize(new Date());  


得到的结果类似于是“"@1162814090119@"”,请注意两边还有双引号。这个是一个ASP.NET AJAX对于Date对象比较特殊的表示方法,如果在某些时候开发人员需要自己来“拼接”字符串时,就需要注意这一点。

给ASP.NET AJAX客户端带来反序列化能力的就是Sys.Serialization.JavaScriptSerializer类的deserialize静态方法。如下:

  1. var obj = Sys.Serialization.JavaScriptSerializer.deserialize(jsonStr); 


它事实上只是简单地调用了 JavaScript内置的eval方法。当然,既然序列化时对于Date对象有特殊的表示方法,在反序列化时,也会考虑到这一点: Sys.Serialization.JavaScriptSerializer类的deserialize静态方法在调用Evail之前,会把 “"@...@"”变成“new Date(...)”的形式,这就是标准的JSON字符串了。


二、JavaScriptTypeResolver与JavaScriptConverter:

客户端的序列化和反序列化非常简单,我把它放在这里一并说明更像是为了让内容更加完整。而服务器端的序列化与反序列化就不是那么轻易的了,它涉及到大量的字符串操作,也涉及到一定的自定义能力。这才是这片文章想要着重说明的。

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对象的标识字符串。
2. Type ResolveType(String):从字符串标识获取一个Type对象。

可以看出,这两个方法是一对相反的操作。他们会分别运用在序列化于反序列化操作之中。如果对于这个类的作用还不是非常了解的话,那么可以看一下 ASP.NET AJAX中这个抽象类的一个简单实现。那就是 Microsoft.Web.Script.Serialization.SimpleTypeResolver类。它的代码如下:

  1. public sealed class SimpleTypeResolver : JavaScriptTypeResolver  
  2. {  
  3. public override Type ResolveType(string id)  
  4. {  
  5. return Type.GetType(id);  
  6. }  
  7. public override string ResolveTypeId(Type type)  
  8. {  
  9. if (type == null)  
  10. {  
  11. throw new ArgumentNullException("type");  
  12. }  
  13. return type.AssemblyQualifiedName;  
  14. }  


以上介绍ASP.NET AJAX客户端

【编辑推荐】

  1. ASP.NET MVC Web应用程序工程
  2. IIS6的ASP.NET ISAPI请求处理过程
  3. ASP.NET控件的七种用户管理相关控件
  4. 对ASP.Net进行RSA加密
  5. ASP.NET得到数据库字符串的方法

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...