ASP.NET怎么定义JavaScript Converter

蜗牛 互联网技术资讯 2022-05-06 22 0

这篇“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”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注蜗牛博客行业资讯频道。

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

评论