我有一对配对列表(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中检查这种类型的类型,我看到它是一个字符串。
我知道没有任何意义。这是我寻求帮助的方式:/
答案 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
}