准备技术:

1.简单的WebService编写;

2.了解Asp.net Ajax 客户端访问WebService

内容:

asp.net ajax框架在去年看过,只是些基本的使用,并没有过多的去研究它的原理。最近在一个项目中要实现客户端访问WebService并返回DataTable类型的数据,当我调用一个返回DataTable的方法时,不能返回成功,在错误的回调函数中告诉我DataTable是一个循环应用类型,不能序列化。当是想过把DataTable替换成其他类型的数据如ArrayList或则Array等,可是有点心不甘,所以查过各个方面的资料,告诉我微软已经提供了一个解决DataTable的JavaScriptConverter的dll文件,当我在web.config中添加了对这个JavascriptConverter引用即可以将DataTable序列化成Json字符串了。

好了,废话不多说了。下面就自己来做个循环应用的实例,并通过自定义JavascriptConverter来解决循环引用的问题。本文只会简单的介绍下服务器端序列化数据类型到Json的过程,不会太深入。

首先先来定义两个类,想了半天最好的实例就是一对夫妻,一个老公只有一个老婆,这是婚姻法规定的,所以老公类型跟老婆类型就可以达到实例中的循环引用。看下两个类型的类试图:

其实两个类里面的内容都很简单,Husband.cs:

usingSystem;

usingSystem.Web;

usingSystem.Web.Services;

usingSystem.Web.Services.Protocols;

usingSystem.ComponentModel;

publicclassHusband

{

privatestring_firstName;

publicstringFirstName

{

get{return_firstName; }

set{ _firstName=value; }    }privatestring_lastName;

publicstringLastName

{

get{return_lastName; }

set{ _lastName=value; }    }privateWife _wife;

publicWife Wife

{

get{return_wife; }

set{ _wife=value; }    }}

Wife.cs:

usingSystem;

usingSystem.Web;

usingSystem.Web.Services;

usingSystem.Web.Services.Protocols;

usingSystem.ComponentModel;

publicclassWife

{

privatestring_firstName;

publicstringFirstName

{

get{return_firstName; }

set{ _firstName=value; }    }privatestring_lastName;

publicstringLastName

{

get{return_lastName; }

set{ _lastName=value; }    }privateHusband _husband;

publicHusband Husband

{

get{return_husband; }

set{ _husband=value; }    }}

然后我定义了个Webservice类用来提供Client的访问,HusbandService.cs:

usingSystem;

usingSystem.Collections;

usingSystem.Linq;

usingSystem.Web;

usingSystem.Web.Services;

usingSystem.Web.Services.Protocols;

usingSystem.Xml.Linq;

usingSystem.Web.Script.Services;

/**///Husband's Method

///

[WebService(Namespace="http://tempuri.org/")]

[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]

[ScriptService]

publicclassHusbandService : System.Web.Services.WebService{

publicHusbandService (){

//Uncomment the following line if using designed components

//InitializeComponent();}

    [WebMethod]

publicHusband GetHusband()

{

        Husband hansband=newHusband();

        hansband.FirstName="Henllyee";

        hansband.LastName="Cui";

        Wife wife=newWife();

        wife.FirstName="Throwen";

        wife.LastName="Yang";

        hansband.Wife=wife;

        wife.Husband=hansband;

returnhansband;

    }

}

我在一个asp.net 页面中通过asp.net ajax对GetHusband()的应用的,JavascriptConverter.aspx:

html PUBLIC"-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

JavaScriptConverter Demo

运行后当我们点击按钮是,会弹出出错的信息,告诉我们Husband是一个循环引用类型,不能序列化。这时我们可以通过编写对应的JavascriptConverter来告诉服务器端如何去序列化。

我们自定的JavascriptConverter必须继承于JavascriptConverter(JavascriptConverter参考文档),然后去重写里面的两个方法跟一个属性:

1.Deserialize:如何反序列化一个Jason到这个Converter类型;

2.Serialize:如何序列化支持的对象到一个Jason;

3.SupportedTypes:这个Converter支持的类型。

好了下面我们定义下一个Converter来支持循环引用,现在我们先定义如何将去序列化,HusbandConverter.cs:

usingSystem;

usingSystem.Data;

usingSystem.Configuration;

usingSystem.Linq;

usingSystem.Web;

usingSystem.Web.Security;

usingSystem.Web.UI;

usingSystem.Web.UI.HtmlControls;

usingSystem.Web.UI.WebControls;

usingSystem.Web.UI.WebControls.WebParts;

usingSystem.Xml.Linq;

usingSystem.Web.Script.Serialization;

usingSystem.Collections.Generic;

/**///Husband's Converter

///

publicclassHusbandConverter:JavaScriptConverter

{

publicHusbandConverter()

标签:

c ajax 调用webservice,Asp.net Ajax WebService 实现循环引用(自定义JavascriptC相关推荐

  1. Asp.net Ajax WebService 实现循环引用(自定义JavascriptConverter)

    准备技术:     1.简单的WebService编写:     2.了解Asp.net Ajax 客户端访问WebService 内容:     asp.net ajax框架在去年看过,只是些基本的 ...

  2. anjularjs ajax 调用,AngularJS AJAX调用的服务(AngularJS Ajax Call in Service

    我想我的应用程序,使AJAX调用一个RESTful Web服务. 在我的html文件是连接到一个范围对象两个文本框. 这两个领域都连接到通过NG-变"后"功能. post方法发送& ...

  3. 《ASP.NET AJAX程序设计 第I卷 服务器端ASP.NET AJAX Extensions与ASP.NET AJAX Control Toolkit》目录(最终定稿)...

    第一二卷都比较简单,特别是第一卷,讲的都是服务器端控件.第二卷是客户端部分,第三卷是高级内容,包括调试.性能.部署.控件开发.源代码结构.用户体验.心理学模型等等-- 第一卷争取在四月份出版,谢谢各位 ...

  4. ajax ashx调试,asp.net——Ajax与ashx异步请求的简单案例

    Ajax与ashx异步请求的简单案例: 前台页面(aspx): function gettext() { var intxt = $("#intxt").val(); $.ajax ...

  5. asp.net 母版与ajax使用 updatepanel,ASP.NET AJAX入门系列(9):在母版页中使用UpdatePanel...

    本文简单介绍一下在母版页中使用UpdatePanel控件,翻译自官方文档. 主要内容 1.添加UpdatePanel控件到Content Page 2.通过Master Page刷新UpdatePan ...

  6. 关掉ajax 的异步,asp.net ajax 取消异步回送

    谁能帮我看一下..点击button1向数据库中插入一条数据,并绑定到gridview1,更新updatepanel1,在更新时我点击"取消"来取消异步回送.结果数据照样插入到表中, ...

  7. 在ASP.NET AJAX 1.0框架中访问Web服务

    一. 简介     如今,微软最新推出的AJAX框架为ASP.NET AJAX 1.0(下载地址为[url]http://ajax.asp.net/downloads/default.aspx[/ur ...

  8. Asp.Net Ajax的两种基本开发模式

    Asp.Net Ajax的两种基本开发模式 引言 最近花了一些时间,将微软Asp.Net官方的Ajax视频全部看了一遍,地址是http://www.asp.net/learn/ajax-videos/ ...

  9. ASP.NET AJAX(服务器回调)

    如果只用纯粹的 js ,你必须弥补 ASP.NET 服务器端抽象和有限的 HTML DOM 之间的鸿沟,这不简单,没有 VS 的智能提示和调试工具,编写无错的代码和诊断错误都非常困难.由于各种突发事件 ...

最新文章

  1. 把java的class文件转成java文件
  2. eclipse搭建 tomcat、
  3. Hadoop源码分析-Context
  4. hiho_1089_floyd最短路
  5. python dataframe是什么_python – 逐个构建DataFrame的最快方法是什么?
  6. Spring集成Mybatis,spring4.x整合Mybatis3.x
  7. C语言中的虚拟地址是什么?
  8. 点击弹出窗口外任意地方关闭弹出窗口
  9. instance在ceph对应pool的位置查询
  10. java 录屏_java 录屏 小工具源码(idea)
  11. LeetCode 1260. 二维网格迁移(二维转一维)
  12. valgrind 内存泄漏_应用 AddressSanitizer 发现程序内存错误
  13. 饥荒进地洞服务器无响应,饥荒联机洞穴设置及常见问题的解决方法
  14. python大佬养成计划-----多进程
  15. JAVA蓝桥杯:高精度算法
  16. 小学思维导图免费模板合集!家长必收藏
  17. intel无线网卡linux驱动安装,Ubuntu应用---安装 Intel Wireless-AC 9462 无线网卡驱动(无法连接wifi,完美解决)...
  18. html 网页背景图片根据屏幕大小CSS自动缩放
  19. C#学习(一):委托和事件
  20. xshell 免费版

热门文章

  1. 无法安装32位版本的Office,因为在您的PC上找到了以下64位程序
  2. java获取支付宝实名信息_获取支付宝授权用户信息
  3. 【MFC基础】13s时间控件DateTime Picker
  4. 如何摆脱低智商的社会,让自己脱颖而出?
  5. Android逆向反编译之工具介绍
  6. mysql 的indexof函数
  7. 深入理解acquire和release原理源码及lock独有特性acquireInterruptibly和tryAcquireNanos
  8. 手把手教你----模拟登录百度首页
  9. 鼠标DPI和液晶显示器分辨率的关系
  10. python网络摄像头模拟usb摄像头_Python27+Opencv3 捕获网络摄像头IPCamera实时视频