Как я могу проанализировать строку json из Httpclient
Привет, я получаю результат json, вызывая внешний api.
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.GetAsync(url).Result;
if (response.IsSuccessStatusCode)
{
var result = response.Content.ReadAsStringAsync().Result;
var s = Newtonsoft.Json.JsonConvert.DeserializeObject(result);
return "Success";
}
else
{
return "Fail";
}
результат в строке var s = Newtonsoft.Json.JsonConvert.DeserializeObject(result);
Я получаю:
{{
"query": "1",
"topScoringIntent": {
"intent": "1",
"score": 0.9978111,
"actions": [
{
"triggered": false,
"name": "1",
"parameters": [
{
"name": "1",
"required": true,
"value": null
},
{
"name": "1",
"required": true,
"value": null
},
{
"name": "1",
"required": true,
"value": null
}
]
}
]
},
"entities": [],
"dialog": {
"prompt": "1",
"parameterName": "1",
"parameterType": "1::1",
"contextId": "11",
"status": "1"
}
}}
как я могу получить prompt
в диалоговом окне?
Я использую http-клиент. Я сталкиваюсь с трудностями в доступе к подсказке ключевого значения.
Я хочу получить подсказку из диалога. как я могу его получить?
Ответы
Ответ 1
Вы хотите посмотреть здесь:
http://www.newtonsoft.com/json/help/html/deserializeobject.htm
Создайте класс с такой же структурой, как у вашего XML. Тогда ваша переменная s
является экземпляром этого класса, и вы можете десериализовать json в структуру класса.
В вашем случае ваша собственность должна быть s.dialog.prompt
.
Ответ 2
На ум приходят три способа.
Предполагая, что json является последовательным, а структура ответа не будет часто меняться, я бы использовал такой инструмент, как json2csharp или jsonutils, для создания классов c #.
затем позвоните:
{GeneratedClass} obj = JsonConvert.DeserializeObject<{GeneratedClass}>(result);
Это даст вам строго типизированный объект, который вы можете использовать.
Вы можете пропустить генерацию класса и использовать динамический объект:
dynamic obj = JsonConvert.DeserializeObject<dynamic>(result)
и доступ к таким свойствам, как:
obj.dialog.prompt;
Вы можете использовать JObject и получить доступ к его свойствам, используя строки
JObject obj = JsonConvert.DeserializeObject(result);
obj["dialog"]["prompt"]
Ответ 3
Отредактировано:
Импорт Newtonsoft.Json
JObject s = JObject.Parse(result);
string yourPrompt = (string)s["dialog"]["prompt"];
Ответ 4
С:
using Newtonsoft.Json;
вы можете сохранить один шаг, непосредственно прочитав содержимое как объект JObject:
dynamic response = await response.Content.ReadAsAsync<JObject>();
string prompt = response.dialog.prompt.ToString();
Примечание. Для этого необходимо, чтобы содержимое ответа имело тип контента "application/json".