通过asmx传递集合

时间:2010-08-10 11:53:48

标签: c# web-services collections

我有一对配对列表(CarType(枚举),代码(字符串))。不幸的是,在这个集合中,代码并不是唯一的。

Van,C1
Van,C2
Pickup,C1

如何通过asmx webservice传递此集合。

现在我将KeyValuePair []作为webMethod

中的参数
[webmethod]
public void DestroyCars(KeyValuePair<string, CarType>[] cars)
{
//implementation.
}

但是当我更新我的webreference(而不是servicereference)并将KeyValuePair []的实例放入

service.DestroyCars(someinstance of KeyValuePair<string, CarType>[])

我得到例外,因为我必须有KeyPairValuOfStringCarType。

为什么这样以及如何解决?

更清楚:

我想通过webservice传递multidimension。

我创建

[的webmethod]     public void DestroyCars(KeyValuePair [] cars)     {     //实现。     }

我更新了我的应用程序的webreference。

当我想从我的应用程序使用KeyValuePair []的新实例调用此webmethod时,我得到错误,该参数不能分配给我的webmethod的参数类型。

Intellisense告诉我,这个参数的类型是KeyPairValuOfStringCarType,而不是true。

我在net.reflector中检查这种类型的类型,我看到它是一个字符串。

我知道没有任何意义。这是我寻求帮助的方式:/

1 个答案:

答案 0 :(得分:4)

您遇到此错误的原因:

  

“参数类型”System.Collections.Generic.KeyValuePair []“不能分配给参数类型mywebservicenamespace.KeyPairValuOfStringCarType

因为当asp.net为您创建Web服务代理(Web服务引用)时,它会“复制”您的Web服务公开的任何自定义类型,在此实例中KeyValuePair<string, CarType>将转换为{{ 1}}在代理中,以便您可以将这些方法传递到Web服务。

调用您的网络服务需要做的是(这在我的Visual Studio 2008中适用于KeyValuePairOfStringCarType网络服务):

asmx

然后,您可以更新您的Web服务引用,并在调用您的Web服务的代码中编写类似于以下内容的内容:

// Create a new CarKeyValuePair in your web service project
public struct CarKeyValuePair
{
    public string Key { get; set; }
    public CarType CarType { get; set; }
}

// Change your web method to use this instead of KeyValuePair
[WebMethod]
public void DestroyCars(CarKeyValuePair[] cars)
{
    // Implementation here
}