温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ASP.NET中怎么定义JavaScript Converter

发布时间:2022-05-23 16:05:29 来源:亿速云 阅读:155 作者:iii 栏目:大数据

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

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<Type> SupportedTypes  {  get  {  yield return typeof(Boy);  }  }  ……  }

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

public override IDictionary, object, object =  Dictionary, object = (Boy)obj;  result["Name"] = boy.Name;  // 如果有GirlFriend引用      if (boy.GirlFriend != null)  {  // 摘除循环引用           = ;  result["GirlFriend"] = boy.GirlFriend;  // 在客户端再建立关联          result["__getRealObject"] =  "function(o) {  = o; return o; }";  }  return result;  }

在这里,我们“手动”地将Boy对象转换为了一个IDictionary<string, objct>,这样就避免出现了循环引用。另外,为了在客户端直接得到一个互相引用的“Boy”和“Girl”对象。


3、自定义序列化功能使用示例

那么我们来看一下使用示例吧,首先我们需要定义一个Web Service方法:

[WebService(Namespace = "http://tempuri.org/")]  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  [Microsoft.Web.Script.Services.ScriptService]  public class BoyGirlService  : System.Web.Services.WebService {  [WebMethod]  public Boy GetBoy(string boyName, string girlName)  {  Boy boy = new Boy();  boy.Name = boyName;  if (!String.IsNullOrEmpty(girlName))  {  Girl girl = new Girl();  girl.Name = girlName;  girl.BoyFriend = boy;  boy.GirlFriend = girl;  }  return boy;  }  }

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI