Мне нужно отправить некоторые поля (из приложения VB.Net) в Словаре в формате JSON в веб-службы.

Ниже приведен код:

Dim dict As New Dictionary(Of String, String)
 dict.Add("Drinks", "2")
 dict.Add("ID", "1")
 Dim parameters As String = JsonConvert.SerializeObject(dict)
 Dim jsonString As String = "{""Pram"":""" + parameters + """}"
 Dim Uri As New Uri(String.Format("http://***/WebServices/UpdateSQL"))
 Dim data = Encoding.Default.GetBytes(jsonString)
 Dim result_post As String = SendRequest(Uri, data, "application/json", "POST")

В моих веб-сервисах (ASP.NET С #) я пытаюсь захватить строку выше, как в приведенном ниже коде

public ActionResult UpdateSQL(string Pram)

Я получаю код ошибки 500: внутренняя ошибка сервера. Я пробовал передавать отдельные поля из приложения VB, и это отлично работает. Ниже приведен код, если я отправлю отдельные поля

Dim jsonString As String = "{""SQL"":""" + sSQL + """," &
                            """TableName"":""" + tableName + """," &
                            """Drinks"":""""2"",""ID"":""1""}"

Приведенная выше строка json при отправке работает абсолютно нормально и фиксируется в веб-сервисах, как показано ниже:

public ActionResult UpdateSQL(string SQL, string TableName, string Drinks, string ID)

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

2
Gaurav 23 Июн 2017 в 15:22
Есть ли шанс отладить и опубликовать полное сообщение об ошибке? Кроме того, нет причин заключать parameters в " в вашем jsonString, поскольку он будет сериализован как полный объект, а в вашей текущей версии это будет объект, представленный строка
 – 
Icepickle
23 Июн 2017 в 16:14
Большое спасибо. Ваше предложение сработало. Удалив фразу «по крайней мере, он сейчас попадает в мой код веб-сервисов. Но теперь для детской коляски получено значение« null ». Ниже приведены некоторые из значений для справки: параметры:« {«« Напитки »»: «« 2 »», "" ID "": "" 1 ""} "jsonString:" {"" Детская коляска "": {"" Напитки "": "" 2 "", "" ID "": "" 1 ""}} " В моих веб-сервисах значение Pram почему-то равно нулю. Не могли бы вы посоветовать, в чем может быть проблема. Спасибо.
 – 
Gaurav
23 Июн 2017 в 17:50
Это неудивительно, вы отправляете объект json, который предполагает, что вы ожидаете объект со свойством Pram, который содержит объект со свойствами SQL, TableName, Drinks и ID
 – 
Icepickle
23 Июн 2017 в 17:57
На самом деле я изменил свои веб-службы, как показано ниже, чтобы просто проверить объект словаря. public ActionResult UpdateSQL (string Pram) Отправка Dim jsonString как String = "{" "Pram" ":" + parameters + "}" из VB. Поэтому в идеале веб-сервисы должны ожидать только Pram со строковым значением в нем. Проверено значение в моих веб-сервисах, и оно равно нулю.
 – 
Gaurav
23 Июн 2017 в 18:04

1 ответ

Лучший ответ
Dim dict As New Dictionary(Of String, String)
        dict.Add("Drinks", "2")
        dict.Add("ID", "1")
        Dim parameters As String = JsonConvert.SerializeObject(dict, Formatting.None)
        Dim Uri As New Uri(String.Format("http://localhost:60627/home/test/"))
        Dim webClient As New WebClient()
        Dim resByte As Byte()
        Dim resString As String
        Dim reqString() As Byte
        webClient.Headers("content-type") = "application/json"
        Dim senddata As Object = JsonConvert.SerializeObject(New With {Key .param = parameters}).ToString()
        reqString = Encoding.Default.GetBytes(senddata)
        resByte = webClient.UploadData(Uri, "post", reqString)
        resString = Encoding.Default.GetString(resByte)

Сначала измените этот тип конкатинации "{" "Детская коляска" ":" "" + параметры + "" "} " потому что это вызывает небольшое недоумение.

И данные не отправляются в свойство сервера, потому что проблема заключается в последовательности экранирования, из-за которой Concat не получает надлежащую сериализацию данных.

Выше я меняю код для

Dim parameters As String = JsonConvert.SerializeObject(dict, Formatting.None)

Это изменить данные

{"Напитки": "2", "ID": "1"}

Следующая сериализация - это изменение

{"param": "{\" Напитки \ ": \" 2 \ ", \" ID \ ": \" 1 \ "}"}

Но ваша Serlization отправляемых данных

{"param": "{" Напитки ":" 2 "," ID ":" 1 "}"}

Итак, данные не отправляются должным образом введите описание изображения здесь

Меня правильно проверили, все работает нормально ....

3
umasankar 23 Июн 2017 в 18:25
Большое спасибо. Это сработало. Я боролся последние 2 дня.
 – 
Gaurav
23 Июн 2017 в 18:49