189 8069 5689

ASP.NETAJAX循环引用的类型怎么用

这篇文章主要讲解了“ASP.NET AJAX循环引用的类型怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ASP.NET AJAX循环引用的类型怎么用”吧!

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、网络空间、营销软件、网站建设、上杭网站维护、网站推广。

有时候在Web Service中会需要使用到比较复杂的类型,它们的特征往往都是含用循环引用,这样的对象如果交给ASP.NET AJAX中默认的序列化方式来处理则会抛出异常,大家经常遇到的“DataTable”问题正是由此引起的。关于这一点,ASP.NET AJAX自然提供了解决方法,在这里“官方”的解决方案就是JavaScriptConverter,它可以让开发人员自定义特定类型的序列化能力。

事实上,需要自定义JavaScriptConverter的类型不止“含有循环引用”的类型,事实上,JavaScriptConverter的目标是“ASP.NET AJAX中无法操作,或者结果不是开发人员所期望那样”的类型,这里的“操作”包括“序列化”于“反序列化”两部分。再举个例子:如果一个类型没有无参数的构造函数,那么也需要定义JavaScriptConverter,否则ASP.NET AJAX无法对其进行反序列化操作。

那么我们就通过一个简单的例子来看一下应该如何开发和使用JavaScriptConverter吧。

1、定义存在循环引用的类型

首先我们定义一个Boy类和Girl类以供使用:

public class Boy  {  public string Name;  public Girl GirlFriend;  }  public class Girl  {  public string Name;  public Boy BoyFriend;  }


很显然,如果我将它们“配成一对”,在序列化输出时就会抛出异常了。就冲着这点,我们就必须定义一个JavaScriptConverter啊,总不能拆散他俩。


2、定义JavaScriptConverter以及序列化能力

我们下面就该开始定义JavaScriptConverter了,我们姑且将其称之为BoyConverter。首先需要告诉ASP.NET,我们这个Converter可以支持哪些类型:

public class BoyConverter : JavaScriptConverter  {  public override IEnumerable SupportedTypes  {  get  {  yield return typeof(Boy);  }  }  ……  }


如果要实现一个比较良好的Serialize方法,就需要处理“有循环引用”和“没有循环引用”两种情况。幸运的是,对于Serialize方法来说,这点比较容易:

  1. public override IDictionary, object> Serialize(object obj,
    JavaScriptSerializer serializer)  

  2. {  

  3. IDictionary, object> result = new Dictionary, object>();  

  4. Boy boy = (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; return o; }";  

  15. }  

  16. return result;  

感谢各位的阅读,以上就是“ASP.NET AJAX循环引用的类型怎么用”的内容了,经过本文的学习后,相信大家对ASP.NET AJAX循环引用的类型怎么用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


网站标题:ASP.NETAJAX循环引用的类型怎么用
网页地址:http://jkwzsj.com/article/gejjdh.html