こんにちは、外部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にアクセスするのが困難です。ダイアログからプロンプトを取得したい。どうすれば入手できますか?
こちらをご覧ください: http://www.newtonsoft.com/json/help/html/deserializeobject.htm
XMLと同じ構造のクラスを作成します。その後、変数s
はこのクラスのインスタンスであり、jsonをクラス構造にデシリアライズできます。
あなたの場合、あなたの財産はs.dialog.Prompt
。
思い浮かぶ3つの方法があります。
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"]
編集済み:
Newtonsoft.Jsonをインポートする
JObject s = JObject.Parse(result);
string yourPrompt = (string)s["dialog"]["Prompt"];
と:
using Newtonsoft.Json;
コンテンツをJObjectとして直接読み取ることで、1つのステップを保存できます。
dynamic response = await response.Content.ReadAsAsync<JObject>();
string Prompt = response.dialog.Prompt.ToString();
注:これには、応答コンテンツがContent-Type "application/json"である必要があります。