Как я могу проанализировать строку 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

На ум приходят три способа.

  1. Предполагая, что json является последовательным, а структура ответа не будет часто меняться, я бы использовал такой инструмент, как json2csharp или jsonutils, для создания классов c #.

    затем позвоните:

    {GeneratedClass} obj = JsonConvert.DeserializeObject<{GeneratedClass}>(result);
    

    Это даст вам строго типизированный объект, который вы можете использовать.

  2. Вы можете пропустить генерацию класса и использовать динамический объект:

    dynamic obj = JsonConvert.DeserializeObject<dynamic>(result)
    

    и доступ к таким свойствам, как:

    obj.dialog.prompt;
    
  3. Вы можете использовать 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".