веб-сервисы asmx и параметры значения ключа - PullRequest
1 голос
/ 30 июня 2010

В настоящее время у меня есть метод asmx, определенный следующим образом:

[WebMethod]
public String Method1(Hashtable form)

Он получает объекты json с переменным количеством атрибутов, например:

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

Это работает нормально ивыдает ожидаемые результаты при вызове, но когда я открываю адрес веб-службы в браузере, я получаю сообщение об ошибке:

Тип System.Collections.Hashtable не поддерживается, поскольку он реализует IDictionary

Я пробовал другие типы данных, например List<DictionaryEntry>, которые исправят это, но затем будут пустыми при вызове метода, и я не могу найти то, что будет работать в обоих случаях ...

Каков «правильный» способ сделать это?

Ответы [ 2 ]

1 голос
/ 30 июня 2010

IDictionary нельзя сериализовать в XML (как работают веб-службы asmx), поэтому вы не можете использовать любую реализацию IDictionary ни в качестве возвращаемого значения, ни в качестве параметра.

Таким образом, «правильный» способ сделать это - использовать то, что не реализует IDictionary. Вместо этого вы можете сделать что-то вроде этого:

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

и затем назовите это так:

service.Method1(new KeyValuePair("name1", "10"), new KeyValuePair("name2", "20"));
0 голосов
/ 30 июня 2010

В настоящее время я могу сделать это в качестве обходного пути:

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

И страница службы .asmx загружается без ошибок.

Это все еще не имеет смысла для меня, хотя...

...