博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用ASP.NET AJAX异步调用Web Service和页面中的类方法(8):服务器端和客户端数据类型的自动转换:数组类型...
阅读量:6471 次
发布时间:2019-06-23

本文共 2117 字,大约阅读时间需要 7 分钟。

本文来自的第三章《异步调用Web Service和页面中的类方法》,请同时参考。

 

3.7.5 数组类型

ASP.NET AJAX异步通讯层能够为数组类型自动生成相应的客户端JavaScript数组,如果数组中的项目为简单类型,那么无需任何额外操作。考虑如下的返回int[]的Web Service方法:

[WebMethod]
public int[] GetIntArray()
{
return new int[] { 1, 2, 3, 4, 5, 6 };
}

通过ASP.NET AJAX异步通讯层调用该Web Service方法之后,返回值在Visual Studio调试器中显示出的结构如图3-27所示。

clip_image002%5B1%5D.jpg

图3-27服务器端int[]类型在客户端的结构

传递简单类型的数组也非常直观,考虑如下接受一个int[]参数的Web Service方法:

[WebMethod]
public void SendIntArray(int[] intArray)
{
// ......
}

我们可以在客户端构造一个整数数组,然后通过ASP.NET AJAX异步通讯层传递给该方法:

var intArray = [1, 2, 3, 4, 5];
PeopleManagementService.SendIntArray(intArray);

图3-28显示了传入的整数数组在Visual Studio调试器中显示出的结构。

clip_image004%5B1%5D.jpg

图3-28 客户端的整数JavaScript数组可被自动转换为服务器端int[]类型

如果数组中包含的项目为复杂类型,那么我们仍旧需要为Web Service类添加[GenerateScriptType(typeof([TypeName]))]属性,其中[TypeName]表示该复杂类型的名称。依旧是以前面的Employee类为例,考虑下面这个返回一个Employee[]类型的Web Service方法,注意其中调用了前面小节中给出的GetGenericEmployeeList()方法:

[WebMethod]
public Employee[] GetEmployeeArray()
{
return GetGenericEmployeeList().ToArray();
}

从客户端调用该Web Service方法之后,返回值在Visual Studio调试器中显示出的结构如图3-29所示。

clip_image006%5B1%5D.jpg

图3-29服务器端Employee[]类型在客户端的结构

为Web Service类添加[GenerateScriptType(typeof(Employee))]属性之后,向服务器端传递Employee[]类型的数组也不难理解。考虑如下接受Employee[]类型的Web Service方法:

[WebMethod]
public void SendEmployeeArray(Employee[] employeeArray)
{
// ......
}

然后用如下JavaScript代码构造一个包含客户端Employee对象的数组,并传递给该SendEmployeeArray()方法:

var employeeArray = new Array();
for (var i = 0; i < 10; ++i) {
var em = new Employee();
em.Id = i;
em.Name = "name " + i;
em.Email = "name" + i + "@some.com";
em.Salary = 1000;
 
employeeArray.push(em);
}
PeopleManagementService.SendEmployeeArray(employeeArray);

ASP.NET AJAX异步通讯层将自动把这个JavaScript数组转换为服务器端的Employee[]类型。图3-30显示了传入参数在Visual Studio调试器中显示出的结构。

clip_image008%5B1%5D.jpg

图3-30客户端的Employee数组可被自动转换为服务器端Employee[]类型

如果需要的话,我们还可以将数组类型改为更为泛化的ArrayList。例如对于如下返回的ArrayList的Web Service方法来说,由于其中实际包含的仍是Employee项目,所以客户端将仍会接收到与图3-29中所示相同的Employee数组。

[WebMethod]
public ArrayList GetEmployeeList()
{
ArrayList employeeList = new ArrayList();
for (int i = 0; i < 10; ++i)
{
Employee em = new Employee(
i,
string.Format("name {0}", i),
string.Format("name{0}@some.com", i),
5000
);
employeeList.Add(em);
}
 
return employeeList;
}

转载地址:http://iocko.baihongyu.com/

你可能感兴趣的文章
腾讯最大规模裁撤中层干部,让贤年轻人
查看>>
当我们谈性能的时候,我们实际上在谈什么?
查看>>
Spring Boot 2.0将会增强Actuator端点的特性
查看>>
i4o开源项目增强LINQ索引功能
查看>>
蔡超:入门 Go 语言必须跨越的五个思维误区
查看>>
使用Akka Actor和Java 8构建反应式应用
查看>>
curl常用命令详解
查看>>
saltstack 添加计划任务
查看>>
Puppet module命令参数介绍(六)
查看>>
《UNIX网络编程》中第一个timer_server的例子
查看>>
CISCO 路由器(4)
查看>>
网络服务搭建、配置与管理大全(Linux版)
查看>>
Silverlight 5 Beta新特性[4]文本缩进控制
查看>>
springMVC多数据源使用 跨库跨连接
查看>>
简单java在线测评程序
查看>>
录音和朗诵的实现
查看>>
Git服务端和客户端安装笔记
查看>>
Spring Security(14)——权限鉴定基础
查看>>
IntelliJ IDEA快捷键
查看>>
【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)
查看>>