方法有一些无效的参数?

时间:2013-03-18 11:54:40

标签: c# winforms web-services

我以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); 
}
  1. 选项的数据类型为ArrayList,在Web服务中,我也使用ArrayList类型的变量来保存此值,那么为什么会出现此错误?

  2. 将参数发送到网络服务是否正确?或者还有其他方法吗?

4 个答案:

答案 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

  1. 右键单击“服务引用”中的服务
  2. 配置服务参考
  3. 数据类型组中的
  4. 将Collection类型更改为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)
{

}
相关问题