Как отправить хеш-таблицу на веб-сервис asmx? - PullRequest
2 голосов
/ 14 мая 2009

Я пытаюсь отправить хеш-таблицу на мой веб-сервис, используя JSON. Однако вы не можете отправить объект словарного типа (по некоторым причинам).

Решение, которое, по-видимому, работает, это «List (Of KeyValuePair (Of String, String))», в любом случае, вывод:

<WebMethod()> _
Public Function test() As List(Of KeyValuePair(Of String, String))
    Dim ret As New List(Of KeyValuePair(Of String, String))
    ret.Add(New KeyValuePair(Of String, String)("foo", "5"))
    ret.Add(New KeyValuePair(Of String, String)("bar", "baz"))
    Return ret
End Function

Выходы (в формате json): [{"Key": "foo", "Value": "5"}, {"Key": "bar", "Value": "baz"}]

Когда я хочу повторно отправить это в javascript, я должен использовать эту функцию:

<WebMethod()> _
Public Sub test2(ByVal obj As List(Of KeyValuePair(Of String, String)))
    Dim dummy As UInt16 = obj.Count
End Sub

Я называю это, используя это как строку параметра JSON:

'{"obj": [{"Key":"foo","Value":"5"},{"Key":"bar","Value":"baz"}]}'

Возвращается с ошибкой. Сама по себе не ошибка, но содержимое 'obj' - это список, который содержит 2 элемента, но когда я смотрю на них в отладчике, оба ничего не значат (или не имеют значения для вас, C #).

Как я могу отправить парные данные из javascript на мой веб-сервис?

Ответы [ 4 ]

1 голос
/ 13 июня 2009

Если вы измените test2, чтобы получить список объектов Dictionary, я думаю, вам будет хорошо.

<WebMethod()> _
Public Sub test2(ByVal obj As List(Of Dictionary(Of String, String)))
    Dim dummy As UInt16 = obj.Count
End Sub
0 голосов
/ 29 июля 2009

Если вы вызываете веб-сервис из .Net и хотите передать ему данные в формате JSON, рассмотрите возможность использования JayRock (http://jayrock.berlios.de/) для преобразования объектов в JSON. Просто обратитесь к DLL, импортируйте пространство имен, создайте JsonObject, заполните его материалом и экспортируйте в строку. Вот пример


Imports Jayrock.Json
Imports Jayrock.Json.Conversion

Public Function foo(hsh As HashTable) As String

  Dim jObj As New JsonObject()

  jObj.Put("_myHashTable", hsh)

  Return JsonConvert.ExportToString(jObj)

End Sub


Если вам нужно перенести данные из DOM в веб-сервис через AJAX, я бы использовал библиотеку Javascript из json.org, как упомянуто выше. Вы также можете легко превратить строку JSON в объект JsonObject с помощью JayRock.

0 голосов
/ 19 июня 2009

[Частичный ответ]: у меня была похожая проблема, и в итоге я использовал эту библиотеку JSON (http://www.json.org/js.html) и JSON.stringify (yourJSONObj) для отправки объекта обратно в мой сервис.

Моя проблема была связана с тем, что JSON неправильно распознал мой объект, предполагалось, что некоторые имена моих свойств были примитивами JSON. С помощью этого вызова (JSON.stringify ()) эта проблема была исправлена.

Вы можете сделать что-то вроде:

var data = JSON.stringify('{"obj": [{"Key":"foo","Value":"5"},{"Key":"bar","Value":"baz"}]}'
); 

А затем отправьте объект данных в службу ASMX.

0 голосов
/ 14 мая 2009

попробуйте это ...

'{"obj": {"foo":"5","bar":"baz"}}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...