我以ArrayList
的形式将数据从Windows窗体发送到Web服务。在我的方法的Web服务声明中就像:
[WebMethod]
public int SaveSelectedOffers(ArrayList offers, int selectedRows)
{
}
在Windows窗体中,点击按钮,我的代码为:
private void offersAvailableSubmit_Click(object sender, EventArgs e)
{
ArrayList options;
options.Add("item 1");
options.Add("item 2");
options.Add("item 2");
//In this line of code it is showing error that Argument 1: cannot convert from 'System.Collections.ArrayList' to 'object[]'
int rowsAffected = serviceCaller.SaveSelectedOffers(options, rowCount);
}
选项的数据类型为ArrayList
,在Web服务中,我也使用ArrayList
类型的变量来保存此值,那么为什么会出现此错误?
将参数发送到网络服务是否正确?或者还有其他方法吗?
答案 0 :(得分:8)
Web服务无法传递复杂类型,如ArrayList
,或者至少没有一些配置,因此只需简化您的Web服务即可。将其更改为:
public int SaveSelectedOffers(object[] offers, int selectedRows)
正如您所看到的那样生成,然后像这样调用它:
private void offersAvailableSubmit_Click(object sender, EventArgs e)
{
object[] options = new object[3];
options[0] = "item 1";
options[1] = "item 2";
options[2] = "item 2";
int rowsAffected = serviceCaller.SaveSelectedOffers(options, rowCount);
}
初始化options
的另一个选项,如果你正在寻找更简洁的东西,就像这样:
object[] options = new object[] { "item 1", "item 2", "item 3" };
答案 1 :(得分:4)
我建议你使用
[WebMethod]
public int SaveSelectedOffers(IList<string> offers, int selectedRows)
{
}
private void offersAvailableSubmit_Click(object sender, EventArgs e)
{
IList<string> options = new List<string>();
options.Add("item 1");
options.Add("item 2");
options.Add("item 2");
int rowsAffected = serviceCaller.SaveSelectedOffers(options, rowCount);
}
编辑#1
迈克尔说:Web服务无法传递像ArrayList这样的复杂类型,或者至少不能传递 没有一些配置,所以只需简化您的Web服务。 - 迈克尔
编辑#2
使您的网络服务使用System.Collections.Generic.List
答案 2 :(得分:2)
忘掉所有这些改变你的代码废话。
如果右键单击“服务引用”文件夹中的服务,并从上下文菜单中选择“配置服务引用”,则可以指定客户端应该用于集合的类型。
在您的情况下,只需从“收集类型”下拉列表中选择System.Collections.ArrayList
即可。
但是,您可以指定System.Collections.Generic.List
并使用强类型通用列表。
答案 3 :(得分:0)
我会在您的Web方法定义中使用类型化列表或数组。没有混乱可能。 arraylist不是强类型的,这意味着直到运行时才能知道内容。
[WebMethod]
public int SaveSelectedOffers(string[] offers, int selectedRows)
{
}