I am getting a JSON result by calling an external 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";
}
The result in line var s = Newtonsoft.Json.JsonConvert.DeserializeObject(result);
I am getting is like:
{{
"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"
}
}}
I am using HttpClient
. I am facing difficulty in accessing prompt
key-value. I want to get prompt
from dialog
. How can I get it?
There are three ways that come to mind.
Assuming the json is consistent and the structure of the response will not change frequently, I would use a tool like json2csharp or jsonutils to create c# classes.
then call:
{GeneratedClass} obj = JsonConvert.DeserializeObject<{GeneratedClass}>(result);
This will give you a strongly typed object that you can use.
You can skip the class generation and use a dynamic object:
dynamic obj = JsonConvert.DeserializeObject<dynamic>(result)
and access properties such as:
obj.dialog.prompt;
You can use a JObject and access its properties using strings
JObject obj = JsonConvert.DeserializeObject(result);
obj["dialog"]["prompt"]