Member 12976241 Ответов: 2

Как получить массив json из POST-запроса в C# webmethod


Я разработал Webmethod на языке C#. Здесь сервер отправляет массив Json в POST-запросе в следующем формате.
[{ "name" : "AAAA", "address" : "Chennai"},{"name": "BBBB", "address":"Trichy"}]

Как прочитать этот Json и сериализовать этот Json?

Что я уже пробовал:

Когда я изменяю запрос на следующий тип, мой код работает правильно.
"JsonData":{[{ "name" : "AAAA", "address" : "Chennai"},{"name": "BBBB", "address":"Trichy"}]}

Но моя просьба была не такой.

Karthik_Mahalingam

пост код

Member 12976241

[Система.Веб.Услуги.WebMethod(EnableSession = true)]
[ScriptMethod(UseHttpGet=false)]
[WebInvoke(ResponseFormat=WebMessageFormat.Json, RequestFormat = WebMessageFormat.В Формате JSON, Кузов=WebMessageBodyStyle.Голый, метод= " пост")]
общественного недействительными booking_sync()
{
var req = новый StreamReader(HttpContext. Current.Запрос.Входной поток);
Треб.BaseStream.Seek(0, SeekOrigin. Begin);
динамическое тело = req. ReadToEnd();

// Приведенный ниже код был использован при изменении формата запроса
var token = JToken.Разбор (тело);
var data = токен.Значение< jarray> ("JsonData");
}

Karthik_Mahalingam

отправляет ли это какие-либо данные клиенту?

Member 12976241

- Да, Мистер Кэтик. Я хочу отправить клиенту какой-то другой массив Json

Karthik_Mahalingam

покажите, как вы получаете значение json для отображения

Member 12976241

это мой код сериализации
Jarray resources = (JArray)JsonConvert.DeserializeObject(тело);

Karthik_Mahalingam

покажите код пользовательского интерфейса, где вы получаете значение json

Member 12976241

Я уже написал сверху

Karthik_Mahalingam

получаете какое-нибудь сообщение об ошибке?

Member 12976241

да, я получаю какую-то ошибку. Ниже я упомянул об ошибке.

Система "Типа '.Коллекции.Общий.IDictionary`2 [[Система.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089], [System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' не поддерживается для десериализации массива."

Karthik_Mahalingam

если
"JsonData": {[{"name" : "AAAA", "address" : "Chennai"}, {"name": "BBBB", "address": "Trichy"}]}

это работает нормально, они почему бы не использовать это

Member 12976241

Из - за того, что третья сторона не отправляет данные в этом формате

Karthik_Mahalingam

попробуйте мое решение

cramtadlos

Йееес ! Я искал уже 2 часа, и ваш пример просто идеален. Спасибо.

2 Ответов

Рейтинг:
2

Richard MacCutchan

Ваши данные не в правильном формате, они должны быть заключены в фигурные скобки { и }. Видеть Введение в JSON[^].


Member 12976241

Привет, мистер Ричард, Спасибо за ответ.Я хочу получить массив Json. Это правильный формат JSON-массив.

Richard MacCutchan

Да, но это не правильный формат для строки JSON, которая должна быть заключена в фигурные скобки.

Member 12976241

хорошо, но третья сторона дала запрос только в этом типе.

Richard MacCutchan

Затем вам нужно сказать им, что данные неверны.

Рейтинг:
1

Karthik_Mahalingam

пробовать

string json  = "[{ \"name\" : \"AAAA\", \"address\" : \"Chennai\"},{\"name\": \"BBBB\", \"address\":\"Trichy\"}]";
           json = "JsonData:{" +  json + "}";


Member 12976241

Спасибо за ваше решение. Когда я назначаю значения вручную внутри кодировки, это работает. Но когда я получаю ценность извне, она не работает.

Karthik_Mahalingam

что вы подразумеваете под " Но когда я получаю ценность извне, "

Member 12976241

Внешние средства, когда третья сторона вызывает эту функцию, в то время они отправят какой-то post-запрос. этот запрос содержит массив json в содержимом тела.

Формат запроса таков
https://gracebeta.com/PMSDEV/TripIBAPI/InstantBooking.asmx/booking_sync -д '[{"reservation_id":"123","partner_hotel_code":"221"}]' -ч "тип контента:приложение/JSON"

Karthik_Mahalingam

так как же вы будете извлекать json

Member 12976241

Используя этот url-адрес, я не могу получить массив json.

Karthik_Mahalingam

просто сделайте проверку, если json находится в ожидаемом формате, а затем проанализируйте его непосредственно, иначе добавьте строку, как указано в решении.

Member 12976241

Хорошо, Мистер Картик. я проверю.

Karthik_Mahalingam

хорошо дайте мне знать если это не сработает