本文介绍ASP.NET AJAX循环引用的类型,在这里“官方”的解决方案就是JavaScriptConverter,它可以让开发人员自定义特定类型的序列化能力。
有时候在Web Service中会需求运用到比较复杂的类型,它们的特征往往都是含用循环引证,这样的方针假如交给ASP.NET AJAX中默许的序列化办法来处理则会抛出反常,咱们常常遇到的“DataTable”问题正是由此引起的。关于这一点,ASP.NET AJAX天然供给了解决办法,在这儿“官方”的解决方案便是JavaScriptConverter,它能够让开发人员自界说特定类型的序列化才能。
事实上,需求自界说JavaScriptConverter的类型不止“含有循环引证”的类型,事实上,JavaScriptConverter的方针是“ASP.NET AJAX中无法操作,或许成果不是开发人员所希望那样”的类型,这儿的“操作”包含“序列化”于“反序列化”两部分。再举个比如:假如一个类型没有无参数的结构函数,那么也需求界说JavaScriptConverter,不然ASP.NET AJAX无法对其进行反序列化操作。
那么咱们就经过一个简略的比如来看一下应该怎么开发和运用JavaScriptConverter吧。
1、界说存在循环引证的类型
首要咱们界说一个Boy类和Girl类以供运用:
- publicclassBoy
- {
- publicstringName;
- publicGirlGirlFriend;
- }
- publicclassGirl
- {
- publicstringName;
- publicBoyBoyFriend;
- }
很显然,假如我将它们“配成一对”,在序列化输出时就会抛出反常了。就冲着这点,咱们就必须界说一个JavaScriptConverter啊,总不能离散他俩。
2、界说JavaScriptConverter以及序列化才能
咱们下面就该开端界说JavaScriptConverter了,咱们权且将其称之为BoyConverter。首要需求告知ASP.NET,咱们这个Converter能够支撑哪些类型:
- publicclassBoyConverter:JavaScriptConverter
- {
- publicoverrideIEnumerable<Type>SupportedTypes
- {
- get
- {
- yieldreturntypeof(Boy);
- }
- }
- ……
- }
假如要完成一个比较杰出的Serialize办法,就需求处理“有循环引证”和“没有循环引证”两种状况。走运的是,关于Serialize办法来说,这点比较简单:
- publicoverrideIDictionary<string,object>Serialize(objectobj,
JavaScriptSerializerserializer)- {
- IDictionary<string,object>result=newDictionary<string,object>();
- Boyboy=(Boy)obj;
- result["Name"]=boy.Name;
- //假如有GirlFriend引证
- if(boy.GirlFriend!=null)
- {
- //去除循环引证
- boy.GirlFriend.BoyFriend=null;
- result["GirlFriend"]=boy.GirlFriend;
- //在客户端再树立相关
- result["__getRealObject"]=
- "function(o){oo.GirlFriend.BoyFriend=o;returno;}";
- }
- returnresult;
- }
以上介绍ASP.NET AJAX循环引证的类型
【修改引荐】
- ASP.NET MVC Web应用程序工程
- IIS6的ASP.NET ISAPI恳求处理进程
- ASP.NET控件的七种用户办理相关控件
- 对ASP.Net进行RSA加密
- ASP.NET得到数据库字符串的办法
知优网 » ASP.NET AJAX循环引证的类型