asmx Web服务和关键值参数

时间:2010-06-30 13:10:00

标签: .net asmx

我目前定义的asmx方法如下:

[WebMethod]
public String Method1(Hashtable form)

它接收具有可变数量属性的json对象,例如:

{"form":{"name1":"10","name2":"20"}}

这样可以正常运行并在调用时给出预期的结果,但是当我在浏览器中打开Web服务地址时,我收到错误:

  

不支持System.Collections.Hashtable类型,因为它实现了IDictionary

我已经尝试过其他数据类型,比如List<DictionaryEntry>会解决这个问题,但是当调用该方法时它会变空,而且我找不到两种情况都可以使用的东西...

这样做的“正确”方法是什么?

2 个答案:

答案 0 :(得分:1)

IDictionary无法序列化为XML(这是asmx Web服务的工作方式),因此您不能将IDictionary的任何实现用作返回值或参数。

所以这样做的“正确”方法是使用任何不实现IDictionary的方法。你可以这样做:

[WebMethod]
public String Method1(params KeyValuePair<string, string>[] formdata)

然后像这样调用它:

service.Method1(new KeyValuePair("name1", "10"), new KeyValuePair("name2", "20"));

答案 1 :(得分:0)

目前,我可以将其作为解决方法:

[WebMethod]
public String Method1(Object form)
{
    Dictionary<String, Object> data = (Dictionary<String, Object>)form;

服务.asmx页面加载时没有错误。

这对我来说仍然没有意义......