Невозможно вернуть словарь (Of String, String) через веб-запрос GET ajax, работает с POST - PullRequest
0 голосов
/ 23 июня 2009

У меня есть следующий веб-метод:

    <WebMethod()> _
    <ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=True, XmlSerializeString:=True)> _
    Public Function GetDictionary() As Dictionary(Of String, String)

        Dim d As New Dictionary(Of String, String)
        d.Add("key1", "value1")
        d.Add("key2", "value2")
        Return d

    End Function

Я могу получить результаты в порядке (JSON), если я использую HttpPost из своего вызова ajax, но как только я использую HttpGet, я получаю следующее исключение:

System.NotSupportedException: тип System.Collections.Generic.Dictionary`2 [[System.String, mscorlib , Версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089], [System.String, mscorlib, Версия = 2.0.0.0, Culture = нейтральный, PublicKeyToken = b77a5c561934e089]] не поддерживается, поскольку он реализует IDictionary

Я хотел использовать здесь HttpGet, чтобы результат можно было кэшировать.

Я пробовал все варианты называть это, но не повезло. Есть идеи? Это возможно с GET?

Ответы [ 2 ]

1 голос
/ 03 ноября 2010

Другая альтернатива - изменить тип Return на String, а затем преобразовать словарь в JSON с помощью JavaScriptSerializer.Serialize . Возможно, это не совсем то, что вы намеревались вернуть в словарь, но это будут пары ключ = значение в ответе JSON.

<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=True, XmlSerializeString:=True)> _
Public Function GetDictionary() As String

    Dim d As New Dictionary(Of String, String)
    d.Add("key1", "value1")
    d.Add("key2", "value2")
    Return New JavaScriptSerializer().Serialize(d)

End Function

И полученный JSON:

{"key1":"value1","key2":"value2"}
1 голос
/ 23 июня 2009

Я немного запутался - если ResponseFormat - JSON (как в вашем примере выше), то должны поддерживаться производные IDictionary , однако, если это XML, тогда я мог бы понять, что вижу эту ошибку как XmlSerializer не поддерживает это.

Один из вариантов отправки словарного типа с помощью XmlSerializer - реализовать логику для преобразования его в массив, List или ArrayList. В качестве альтернативы вы могли бы реализовать собственный сериализатор для данных и написать свой собственный XML, возвращая вместо этого XmlDocument из вашего метода. Это позволит вам форматировать данные любым способом, который вы выберете.

Может быть, вы могли бы уточнить, используете ли вы JSON или XML?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...