本文介绍ASP.NET AJAX循环引用的类型,在这里“官方”的解决方案就是JavaScriptConverter,它可以让开发人员自定义特定类型的序列化能力。

有时候在Web Service中会需求运用到比较复杂的类型,它们的特征往往都是含用循环引证,这样的方针假如交给ASP.NET AJAX中默许的序列化办法来处理则会抛出反常,咱们常常遇到的“DataTable”问题正是由此引起的。关于这一点,ASP.NET AJAX天然供给了解决办法,在这儿“官方”的解决方案便是JavaScriptConverter,它能够让开发人员自界说特定类型的序列化才能。

ASP.NET AJAX循环引证的类型  循环引用 AJAX 第1张

事实上,需求自界说JavaScriptConverter的类型不止“含有循环引证”的类型,事实上,JavaScriptConverter的方针是“ASP.NET AJAX中无法操作,或许成果不是开发人员所希望那样”的类型,这儿的“操作”包含“序列化”于“反序列化”两部分。再举个比如:假如一个类型没有无参数的结构函数,那么也需求界说JavaScriptConverter,不然ASP.NET AJAX无法对其进行反序列化操作。

那么咱们就经过一个简略的比如来看一下应该怎么开发和运用JavaScriptConverter吧。

1、界说存在循环引证的类型

首要咱们界说一个Boy类和Girl类以供运用:

  1. publicclassBoy
  2. {
  3. publicstringName;
  4. publicGirlGirlFriend;
  5. }
  6. publicclassGirl
  7. {
  8. publicstringName;
  9. publicBoyBoyFriend;
  10. }


很显然,假如我将它们“配成一对”,在序列化输出时就会抛出反常了。就冲着这点,咱们就必须界说一个JavaScriptConverter啊,总不能离散他俩。


2、界说JavaScriptConverter以及序列化才能

咱们下面就该开端界说JavaScriptConverter了,咱们权且将其称之为BoyConverter。首要需求告知ASP.NET,咱们这个Converter能够支撑哪些类型:

  1. publicclassBoyConverter:JavaScriptConverter
  2. {
  3. publicoverrideIEnumerable<Type>SupportedTypes
  4. {
  5. get
  6. {
  7. yieldreturntypeof(Boy);
  8. }
  9. }
  10. ……
  11. }


假如要完成一个比较杰出的Serialize办法,就需求处理“有循环引证”和“没有循环引证”两种状况。走运的是,关于Serialize办法来说,这点比较简单:

  1. publicoverrideIDictionary<string,object>Serialize(objectobj,
    JavaScriptSerializerserializer)
  2. {
  3. IDictionary<string,object>result=newDictionary<string,object>();
  4. Boyboy=(Boy)obj;
  5. result["Name"]=boy.Name;
  6. //假如有GirlFriend引证
  7. if(boy.GirlFriend!=null)
  8. {
  9. //去除循环引证
  10. boy.GirlFriend.BoyFriend=null;
  11. result["GirlFriend"]=boy.GirlFriend;
  12. //在客户端再树立相关
  13. result["__getRealObject"]=
  14. "function(o){oo.GirlFriend.BoyFriend=o;returno;}";
  15. }
  16. returnresult;
  17. }

以上介绍ASP.NET AJAX循环引证的类型

【修改引荐】

  1. ASP.NET MVC Web应用程序工程
  2. IIS6的ASP.NET ISAPI恳求处理进程
  3. ASP.NET控件的七种用户办理相关控件
  4. 对ASP.Net进行RSA加密
  5. ASP.NET得到数据库字符串的办法
转载请说明出处
知优网 » ASP.NET AJAX循环引证的类型

发表评论

您需要后才能发表评论