加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

客户端访问WebService(2)

发布时间:2020-12-17 02:36:47 所属栏目:安全 来源:网络整理
导读:1,复杂参数类型的基本使用方式 注意: 作为参数的复杂数据类型(自定义数据类型)一定要有默认的构造函数(无参数的构造函数) ?? ? ? ?[*] 如果参数类型手动添加了有参数的构造函数,必须手动添加一个无参数的默认构造函数 ?? ? ? ?客户端设置类型要有公开的字段
1,复杂参数类型的基本使用方式
注意: 作为参数的复杂数据类型(自定义数据类型)一定要有默认的构造函数(无参数的构造函数)
?? ? ? ?[*] 如果参数类型手动添加了有参数的构造函数,必须手动添加一个无参数的默认构造函数
?? ? ? ?客户端设置类型要有公开的字段和属性,使用json进行传输格式,自动进行序列化和反序列华

例子:?
自定义数据类型Color

  1. using?System;
  2. using?System.Data;
  3. using?System.Configuration;
  4. using?System.Web;
  5. using?System.Web.Security;
  6. using?System.Web.UI;
  7. using?System.Web.UI.HtmlControls;
  8. using?System.Web.UI.WebControls;
  9. using?System.Web.UI.WebControls.WebParts;
  10. namespace?AJAXEnabledWebApplication3
  11. {
  12. ????public?class?Color
  13. ????{
  14. ????????//手动添加默认构造函数
  15. ????????public?Color()
  16. ????????{
  17. ????????}
  18. ????????public?Color(byte?red,?byte?green,?byte?blue)
  19. ????????{
  20. ????????????this.Red?=?red;
  21. ????????????this.Blue?=?blue;
  22. ????????????this.Green?=?green;
  23. ????????}
  24. ????????public?byte?Red;
  25. ????????public?byte?Green;
  26. ????????public?byte?Blue;
  27. ????}
  28. }
webservice代码

  1. using?System;
  2. using?System.Collections;
  3. using?System.ComponentModel;
  4. using?System.Data;
  5. using?System.Web;
  6. using?System.Web.Services;
  7. using?System.Web.Services.Protocols;
  8. namespace?AJAXEnabledWebApplication3
  9. {
  10. ????///?<summary>
  11. ????///?WebService1?的摘要说明
  12. ????///?</summary>
  13. ????[WebService(Namespace?=?"http://tempuri.org/")]
  14. ????[WebServiceBinding(ConformsTo?=?WsiProfiles.BasicProfile1_1)]
  15. ????[ToolboxItem(false)]
  16. ????[System.Web.Script.Services.ScriptService]
  17. ????public?class?WebService1?:?System.Web.Services.WebService
  18. ????{
  19. ????????[WebMethod]
  20. ????????[System.Web.Script.Services.GenerateScriptType(typeof(Color))]
  21. ????????//获取颜色的反色
  22. ????????public?Color?ReverseColor(Color?color)
  23. ????????{
  24. ????????????return?new?Color((byte)(255?-color.Red),
  25. ????????????????????????????????????(byte)(255?-?color.Blue),
  26. ?????????????????????????????????????(byte)(255?-?color.Green));
  27. ????????}
  28. ????}
  29. }
aspx代码:?

  1. <%@?Page?Language="C#"?AutoEventWireup="true"?CodeBehind="Default.aspx.cs"?Inherits="AJAXEnabledWebApplication3._Default"?%>
  2. <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html?xmlns="http://www.w3.org/1999/xhtml"?>
  4. <head?runat="server">
  5. ????<title>Untitled?Page</title>
  6. </head>
  7. <body>
  8. ????<form?id="form1"?runat="server">
  9. ????????<asp:ScriptManager?ID="ScriptManager1"?runat="server">
  10. ????????<Services>
  11. ????????<asp:ServiceReference?Path="WebService1.asmx"?/>
  12. ????????</Services>
  13. ????????</asp:ScriptManager>
  14. <input?type="button"?value="ReverseColor"?onclick="Reversecolor()"?/>
  15. ????<script?language="javascript"?type="text/javascript">
  16. ????????function?Reversecolor(){
  17. ??????????
  18. ???????????//var?color=new?Object();
  19. ???????????//color.Red=50;
  20. ???????????//color.Blue=70;
  21. ???????????//color.Green=60;
  22. ???????????//Json字符串代替上面的方法
  23. ????????????var?color={"Red":50,"Blue":70,"Green":60};
  24. ????????????//把转换前的color传入回调函数
  25. ????????????AJAXEnabledWebApplication3.WebService1.ReverseColor(color,reveseColorSucceeded,null,color);
  26. ????????}
  27. ????????//接受到转换后的结果和转换前的color
  28. ????????function?reveseColorSucceeded(result,color){
  29. ????????
  30. ????????????alert(String.format("转换后:/nRed:{0}/nBlue:{1}/nGreen:{2}/n转换前:/nRed:{3}/nBlue:{4}/nGreen:{5}?",
  31. ?????????????????????????????????????????result.Red,result.Blue,result.Green,color.Red,color.Blue,color.Green));
  32. ????????}
  33. ????</script>
  34. ????</form>
  35. </body>
  36. </html>
运行后用web develop help察看
提交的json串:?{"color":{"Red":50,"Green":60}}
返回的json串:?{"__type":"AJAXEnabledWebApplication3.Color","Red":205,"Green":185,"Blue":195}


2,生成复杂参数类型的客户端代理

注意: 1,使用[GenerateScriptType(typeof(自定义类))]Attribute标记要生成的代理的参数类型
?? ? ? ?2,上面的标记可以在类,接口或者方法上面定义
?? ? ? ?3,生成的代理中将包括客户端类型的代理。且调用方法时候可以创建具体的类型
?? ? ? ? ? ? 创建具体类型的时候用 new [Namespaces].ClassName(),默认的构造函数(没有其他的构造函数,只能适用默认的无参数的构造函数)
?? ? ? ??
例子:
还是使用上面的自定义的color类
  1. using?System;
  2. using?System.Data;
  3. using?System.Configuration;
  4. using?System.Web;
  5. using?System.Web.Security;
  6. using?System.Web.UI;
  7. using?System.Web.UI.HtmlControls;
  8. using?System.Web.UI.WebControls;
  9. using?System.Web.UI.WebControls.WebParts;
  10. namespace?AJAXEnabledWebApplication3
  11. {
  12. ????public?class?Color
  13. ????{
  14. //默认构造函数
  15. ????????public?Color()
  16. ????????{
  17. ????????}
  18. ????????public?Color(byte?red,?byte?blue)
  19. ????????{
  20. ????????????this.Red?=?red;
  21. ????????????this.Blue?=?blue;
  22. ????????????this.Green?=?green;
  23. ????????}
  24. ????????public?byte?Red;
  25. ????????public?byte?Green;
  26. ????????public?byte?Blue;
  27. ????}
  28. }
webservice 代码:


  1. using?System;
  2. using?System.Collections;
  3. using?System.ComponentModel;
  4. using?System.Data;
  5. using?System.Web;
  6. using?System.Web.Services;
  7. using?System.Web.Services.Protocols;
  8. namespace?AJAXEnabledWebApplication3
  9. {
  10. ????///?<summary>
  11. ????///?WebService1?的摘要说明
  12. ????///?</summary>
  13. ????[WebService(Namespace?=?"http://tempuri.org/")]
  14. ????[WebServiceBinding(ConformsTo?=?WsiProfiles.BasicProfile1_1)]
  15. ????[ToolboxItem(false)]
  16. ????[System.Web.Script.Services.ScriptService]
  17. ????public?class?WebService1?:?System.Web.Services.WebService
  18. ????{
  19. ????????[WebMethod]
  20. ???????//下面的标记就把自己定义的类color生成了客户端代理
  21. ????????[System.Web.Script.Services.GenerateScriptType(typeof(Color))]
  22. ????????//获取颜色的反色
  23. ????????public?Color?ReverseColor(Color?color)
  24. ????????{
  25. ????????????return?new?Color((byte)(255?-color.Red),
  26. ????????????????????????????????????(byte)(255?-?color.Blue),
  27. ?????????????????????????????????????(byte)(255?-?color.Green));
  28. ????????}
  29. ????}
  30. }
aspx代码:

  1. <%@?Page?Language="C#"?AutoEventWireup="true"?CodeBehind="Default.aspx.cs"?Inherits="AJAXEnabledWebApplication3._Default"?%>
  2. <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html?xmlns="http://www.w3.org/1999/xhtml"?>
  4. <head?runat="server">
  5. ????<title>Untitled?Page</title>
  6. </head>
  7. <body>
  8. ????<form?id="form1"?runat="server">
  9. ????????<asp:ScriptManager?ID="ScriptManager1"?runat="server">
  10. ????????<Services>
  11. ????????<asp:ServiceReference?Path="WebService1.asmx"?/>
  12. ????????</Services>
  13. ????????</asp:ScriptManager>
  14. <input?type="button"?value="ReverseColor"?onclick="Reversecolor()"?/>
  15. ????<script?language="javascript"?type="text/javascript">
  16. ????????function?Reversecolor(){
  17. ??????????//因为webservice中为color生成了一个客户端代理,故可以直接创建具体类型
  18. ??????????//但代理只提供了默认的无参术的构造函数?
  19. ??????????//不能使用?new?AJAXEnabledWebApplication3.Test(50,70,60)
  20. ????????????var?color=new?AJAXEnabledWebApplication3.Test();
  21. ????????????color.Red=50;
  22. ????????????color.Blue=70;
  23. ????????????color.Green=60;
  24. ????????????//把转换前的color传入回调函数
  25. ????????????AJAXEnabledWebApplication3.WebService1.ReverseColor(color,color);
  26. ????????}
  27. ????????//接受到转换后的结果和转换前的color
  28. ????????function?reveseColorSucceeded(result,color){
  29. ????????
  30. ????????????alert(String.format("转换后:/nRed:{0}/nBlue:{1}/nGreen:{2}/n转换前:/nRed:{3}/nBlue:{4}/nGreen:{5}?",
  31. ?????????????????????????????????????????result.Red,color.Green));
  32. ????????}
  33. ????</script>
  34. ????</form>
  35. </body>
  36. </html>
结果一样:
但是传输的json字符串有区别:
传给服务器的json字符串:{"color":{"__type":"AJAXEnabledWebApplication3.Color","Red":50,"Green":60}}
服务器回传的json字符串:{"__type":"AJAXEnabledWebApplication3.Color","Blue":195}

和第一个例子返回的json串一样,提交的json串有区别 下面解释

3,客户端代理的作用
?? a,在对象中做了一个标记: "__type"="AJAXEnabledWebApplication3.Color"
?? ? 这样,服务器端就可以根据上面的标记选择反序列华的目标类型
?? b,呈现一些多态效果

例子:
自己定义类型:
  1. using?System;
  2. using?System.Data;
  3. using?System.Configuration;
  4. using?System.Web;
  5. using?System.Web.Security;
  6. using?System.Web.UI;
  7. using?System.Web.UI.HtmlControls;
  8. using?System.Web.UI.WebControls;
  9. using?System.Web.UI.WebControls.WebParts;
  10. namespace?AJAXEnabledWebApplication3
  11. {
  12. ????public?abstract?class?Employee
  13. ????{
  14. ????????//员工工作年限
  15. ????????public?int?Years?{?get;?set;?}
  16. ????????//返回类类型的名字
  17. ????????public?string?RealStatus
  18. ????????{
  19. ????????????get
  20. ????????????{
  21. ????????????????return?this.GetType().Name;
  22. ????????????}
  23. ????????}
  24. ????????//员工工资的计算方法
  25. ????????public?abstract?int?CalculateSalary();
  26. ????}
  27. ????//实习生?
  28. ????public?class?Intern?:?Employee
  29. ????{
  30. ????????public?override?int?CalculateSalary()
  31. ????????{
  32. ????????????return??2000;
  33. ????????}
  34. ????}
  35. ????public?class?Vendor?:?Employee
  36. ????{
  37. ????????public?override?int?CalculateSalary()
  38. ????????{
  39. ????????????return?5000+1000*(Years-1);
  40. ????????}
  41. ????}
  42. ????public?class?FullTimeEmployee?:?Employee
  43. ????{
  44. ????????public?override?int?CalculateSalary()
  45. ????????{
  46. ???????????return?15000+2000*(Years-1);
  47. ????????}
  48. ????}
  49. }
webService代码:

  1. using?System;
  2. using?System.Collections;
  3. using?System.ComponentModel;
  4. using?System.Data;
  5. using?System.Web;
  6. using?System.Web.Services;
  7. using?System.Web.Services.Protocols;
  8. namespace?AJAXEnabledWebApplication3
  9. {
  10. ????///?<summary>
  11. ????///?employeeService?的摘要说明
  12. ????///?</summary>
  13. ????[WebService(Namespace?=?"http://tempuri.org/")]
  14. ????[WebServiceBinding(ConformsTo?=?WsiProfiles.BasicProfile1_1)]
  15. ????[ToolboxItem(false)]
  16. ????[System.Web.Script.Services.ScriptService]
  17. ????public?class?employeeService?:?System.Web.Services.WebService
  18. ????{
  19. ????????[WebMethod]
  20. ???????//给定义的类声明代理
  21. ????????[System.Web.Script.Services.GenerateScriptType(typeof(Intern))]
  22. ????????[System.Web.Script.Services.GenerateScriptType(typeof(Vendor))]
  23. ????????[System.Web.Script.Services.GenerateScriptType(typeof(FullTimeEmployee))]
  24. ????????public?string?GetSalary(Employee?employee)
  25. ????????{
  26. ????????????return?"I?am?"+employee.RealStatus+",And?my?salary?is?"+employee.CalculateSalary();
  27. ????????}
  28. ????}
  29. }
aspx页面代码:

  1. <%@?Page?Language="C#"?AutoEventWireup="true"?CodeBehind="WebForm1.aspx.cs"?Inherits="AJAXEnabledWebApplication3.WebForm1"?%>
  2. <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html?xmlns="http://www.w3.org/1999/xhtml"?>
  4. <head?runat="server">
  5. ????<title>无标题页</title>
  6. </head>
  7. <body>
  8. ????<form?id="form1"?runat="server">
  9. ????<asp:ScriptManager?ID="ScriptManager1"?runat="server">
  10. ????<Services>
  11. ????<asp:ServiceReference?Path="employeeService.asmx"?/>
  12. ????</Services>
  13. ????</asp:ScriptManager>
  14. ????????????年限:<asp:TextBox?ID="txtYear"?runat="server">
  15. ????????</asp:TextBox><br?/>
  16. ????????类型:?
  17. ????????<asp:DropDownList?ID="ddltype"?runat="server"?>
  18. ????????<asp:ListItem?Text="Intern"?Value="Intern"></asp:ListItem>
  19. ????????<asp:ListItem?Text="Vendor"?Value="Vendor"></asp:ListItem>
  20. ?????????<asp:ListItem?Text="FTE"?Value="FTE"></asp:ListItem>
  21. ????????</asp:DropDownList><br?/>
  22. ????<input?id="Button1"?type="button"?value="button"?onclick="GetSalary()"?/><br?/>
  23. ????Result:<asp:Label?ID="lblResult"?runat="server"?Text=""></asp:Label>
  24. ????
  25. ????<script?language="javascript"?type="text/javascript">
  26. ????function?GetSalary(){
  27. ????????var?emp=null;
  28. ????????var?combo=$get("ddltype");
  29. ????????switch(combo.options[combo.selectedIndex].text){
  30. ????????????case?"Intern":
  31. ????????????????emp=new?AJAXEnabledWebApplication3.Intern();
  32. ????????????break;
  33. ????????????case?"Vendor":
  34. ?????????????????emp=new?AJAXEnabledWebApplication3.Vendor();
  35. ????????????break;
  36. ????????????case?"FTE":
  37. ????????????????emp=new?AJAXEnabledWebApplication3.FullTimeEmployee();
  38. ????????????break;
  39. ????????}
  40. ?? ? ? ? //parseInt()的作用就是把一个字符串转化成10进制的方式 可以转化成 2, 8 , 16进制
  41. ?? ? ? ?
  42. ????????emp.Years=parseInt($get("txtYear").value,10);
  43. ????????AJAXEnabledWebApplication3.employeeService.GetSalary(emp,succeeded);
  44. ????}
  45. ????function?succeeded(result){
  46. ????????$get("lblResult").innerHTML=result;
  47. ????}
  48. ????</script>
  49. ????</form>
  50. </body>
  51. </html>
aspx页面代码:

  1. <%@?Page?Language="C#"?AutoEventWireup="true"?CodeBehind="WebForm2.aspx.cs"?Inherits="AJAXEnabledWebApplication3.WebForm2"?%>
  2. <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html?xmlns="http://www.w3.org/1999/xhtml"?>
  4. <head?runat="server">
  5. ????<title>无标题页</title>
  6. </head>
  7. <body>
  8. ????<form?id="form1"?runat="server">
  9. ????<asp:ScriptManager?ID="ScriptManager1"?runat="server">
  10. ????<Services>
  11. ????<asp:ServiceReference?Path="TableWebService.asmx"?/>
  12. ????</Services>
  13. ????</asp:ScriptManager>
  14. ????<input?id="Button1"?type="button"?value="getTable"?onclick="getTable()"/>
  15. ????<div?id="result"></div>
  16. ????<script?language="javascript"?type="text/javascript">
  17. ????????function?getTable(){
  18. ??????????AJAXEnabledWebApplication3.TableWebService.GetTable(getSueecceded,getFailed);
  19. ????????}
  20. ????????function?getSueecceded(result){
  21. ????????????//alert(result);
  22. ????????????var?sb=new?Sys.StringBuilder("<Table?border='1'>");
  23. ????????????sb.append("<tr><td>ID</td><td>Text</td></tr>");
  24. ????????????for(var?i=0;i<result.rows.length;i++){
  25. ????????????sb.append(
  26. ??????????????????String.format("<tr><td>{0}</td><td>{1}</td></tr>",
  27. ???????????????????result.rows[i].ID,
  28. ???????????????????result.rows[i]["Text"]
  29. ????????????));
  30. ????????????????$get("result").innerHTML=sb.toString();
  31. ????????????}
  32. ????????????sb.append("</Table>");
  33. ????????}
  34. ????????function?getFailed(error){
  35. ????????????alert(error.get_message());
  36. ????????}
  37. ????</script>
  38. ????</form>
  39. </body>
  40. </html>
需要对web.config做一些更改

  1. <system.web.extensions>
  2. ????<scripting>
  3. ??????<webServices>
  4. ??????<!--?Uncomment?this?line?to?customize?maxJsonLength?and?add?a?custom?converter?-->
  5. ??????????<jsonSerialization?maxJsonLength="500">
  6. ??????????????<converters>
  7. ??????????????????<add?name="DataSetConverter"?type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter,?Microsoft.Web.Preview,?Version=1.0.61025.0,?Culture=neutral,?PublicKeyToken=31bf3856ad364e35"/>
  8. ??????????????????<add?name="DataRowConverter"?type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter,?PublicKeyToken=31bf3856ad364e35"/>
  9. ??????????????????<add?name="DataTableConverter"?type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter,?PublicKeyToken=31bf3856ad364e35"/>
  10. ??????????????</converters>
  11. ??????????</jsonSerialization>
  12. ??????<!--?Uncomment?this?line?to?enable?the?authentication?service.?Include?requireSSL="true"?if?appropriate.?-->
  13. ??????<!--
  14. ????????<authenticationService?enabled="true"?requireSSL?=?"true|false"/>
  15. ??????-->
  16. ??????<!--?Uncomment?these?lines?to?enable?the?profile?service.?To?allow?profile?properties?to?be?retrieved
  17. ???????????and?modified?in?ASP.NET?AJAX?applications,?you?need?to?add?each?property?name?to?the?readAccessProperties?and
  18. ???????????writeAccessProperties?attributes.?-->
  19. ??????<!--
  20. ??????<profileService?enabled="true"
  21. ??????????????????????readAccessProperties="propertyname1,propertyname2"
  22. ??????????????????????writeAccessProperties="propertyname1,propertyname2"?/>
  23. ??????-->
  24. ??????</webServices>
  25. ??????<!--
  26. ??????<scriptResourceHandler?enableCompression="true"?enableCaching="true"?/>
  27. ??????-->
  28. ????</scripting>
  29. ??</system.web.extensions>
另:需要引入ASP.NET 2.0 AJAX Futures January CTP中的一个Microsoft.Web.Preview.dll文件,里面提供了上面配置文件中  的一些类和方法,引入dll后必须更改web.config不然会原有的代码可能会有冲突

4,使用 JavaScriptConverter

复杂类型作为返回值时可能会出现问题 --循环引用

解决方法:适用自定义数据类型封装复杂类型
?? ? ? ? ? ? ? 在web.config里定义一个Converter

例子:
webService方法中返回一个表格

  1. using?System;
  2. using?System.Collections;
  3. using?System.ComponentModel;
  4. using?System.Data;
  5. using?System.Web;
  6. using?System.Web.Services;
  7. using?System.Web.Services.Protocols;
  8. namespace?AJAXEnabledWebApplication3
  9. {
  10. ????///?<summary>
  11. ????///?TableWebService?的摘要说明
  12. ????///?</summary>
  13. ????[WebService(Namespace?=?"http://tempuri.org/")]
  14. ????[WebServiceBinding(ConformsTo?=?WsiProfiles.BasicProfile1_1)]
  15. ????[ToolboxItem(false)]
  16. ????[System.Web.Script.Services.ScriptService]
  17. ????public?class?TableWebService?:?System.Web.Services.WebService
  18. ????{
  19. ????????[WebMethod]
  20. ????????//返回一个表格
  21. ????????public?DataTable?GetTable()
  22. ????????{
  23. ????????????DataTable?dt?=?new?DataTable();
  24. ????????????dt.Columns.Add(new?DataColumn("ID",typeof(int)));
  25. ????????????dt.Columns.Add(new?DataColumn("Text",typeof(string)));
  26. ????????????Random?random=new?Random(DateTime.Now.Millisecond);
  27. ????????????for?(int?i?=?0;?i?<?10;?i++)
  28. ????????????{
  29. ????????????????dt.Rows.Add(i,random.Next(0,100).ToString());
  30. ????????????}
  31. ????????????return?dt;
  32. ????????}
  33. ????}
  34. }
aspx代码: 

  1. <%@?Page?Language="C#"?AutoEventWireup="true"?CodeBehind="WebForm2.aspx.cs"?Inherits="AJAXEnabledWebApplication3.WebForm2"?%>
  2. <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html?xmlns="http://www.w3.org/1999/xhtml"?>
  4. <head?runat="server">
  5. ????<title>无标题页</title>
  6. </head>
  7. <body>
  8. ????<form?id="form1"?runat="server">
  9. ????<asp:ScriptManager?ID="ScriptManager1"?runat="server">
  10. ????<Services>
  11. ????<asp:ServiceReference?Path="TableWebService.asmx"?/>
  12. ????</Services>
  13. ????</asp:ScriptManager>
  14. ????<input?id="Button1"?type="button"?value="getTable"?onclick="getTable()"/>
  15. ????<div?id="result"></div>
  16. ????<script?language="javascript"?type="text/javascript">
  17. ????????function?getTable(){
  18. ??????????AJAXEnabledWebApplication3.TableWebService.GetTable(getSueecceded,
  19. ???????????????????result.rows[i]["Text"]
  20. ????????????));
  21. ????????????????$get("result").innerHTML=sb.toString();
  22. ????????????}
  23. ????????????sb.append("</Table>");
  24. ????????}
  25. ????????function?getFailed(error){
  26. ????????????alert(error.get_message());
  27. ????????}
  28. ????</script>
  29. ????</form>
  30. </body>
  31. </html>
只写上面的代码会有错误,另我们需要引用ASP.NET 2.0 AJAX Futures January CTP中v1.0.61025下的一个Microsoft.Web.Preview.dll的dll ?然后把v1.0.61025下的 web_CTP.config中的
  1. ??????<jsonSerialization?maxJsonLength="500">
  2. ??????????????<converters>
  3. ??????????????????<add?name="DataSetConverter"?type="Microsoft.Web.Preview.Script.Serialization.Converters.DataSetConverter,?PublicKeyToken=31bf3856ad364e35"/>
  4. ??????????????????<add?name="DataRowConverter"?type="Microsoft.Web.Preview.Script.Serialization.Converters.DataRowConverter,?PublicKeyToken=31bf3856ad364e35"/>
  5. ??????????????????<add?name="DataTableConverter"?type="Microsoft.Web.Preview.Script.Serialization.Converters.DataTableConverter,?PublicKeyToken=31bf3856ad364e35"/>
  6. ??????????????</converters>
  7. ??????????</jsonSerialization>
代码添加到web.config对应的代码中就ok

上面的步骤必须同时添加,只添加引用不改 web.config会和其他代码发生错误,原因还不知道~

5,自定义JavaScriptConverter

目的:用于处理复杂类型,处理循环引用,简化默认的复杂序列化和反序列化行为
过程:定义一个Converter继承JavaScriptConerter类
?? ? ? ? 实现SupportedTypes
?? ? ? ? 实现Serialize方法用于复杂数据
?? ? ? ? 实现Deserialize方法用于反序列化复杂数据
?? ? ? ? 在web.config中注册converter

例子回头补上~

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读