web-dev-qa-db-ja.com

HttpclientからJSON文字列を解析するにはどうすればよいですか

こんにちは、外部apiを呼び出してjsonの結果を取得しています。

_        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クライアントを使用しています。 Prompt Key-Valueにアクセスするのが困難です。ダイアログからプロンプトを取得したい。どうすれば入手できますか?

16
Sonali

こちらをご覧ください: http://www.newtonsoft.com/json/help/html/deserializeobject.htm

XMLと同じ構造のクラスを作成します。その後、変数sはこのクラスのインスタンスであり、jsonをクラス構造にデシリアライズできます。

あなたの場合、あなたの財産はs.dialog.Prompt

9
c0d3b34n

思い浮かぶ3つの方法があります。

  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"]
    
24
Omar Elabd

編集済み:

Newtonsoft.Jsonをインポートする

JObject s = JObject.Parse(result);
string yourPrompt = (string)s["dialog"]["Prompt"];
11
cemsina güzel

と:

using Newtonsoft.Json;

コンテンツをJObjectとして直接読み取ることで、1つのステップを保存できます。

dynamic response = await response.Content.ReadAsAsync<JObject>();
string Prompt = response.dialog.Prompt.ToString();

注:これには、応答コンテンツがContent-Type "application/json"である必要があります。

0
DSpirit