Salut, je reçois résultat json en appelant une api externe.
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";
}
le résultat dans la ligne var s = Newtonsoft.Json.JsonConvert.DeserializeObject(result);
que je reçois est comme:
{{
"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"
}
}}
comment puis-je obtenir Prompt
de 'dialogue'? J'utilise le client http. J'ai du mal à accéder à la valeur-clé de l'invite. Je veux obtenir une invite de dialogue. comment puis-je l'avoir?
Vous voulez jeter un oeil ici: http://www.newtonsoft.com/json/help/html/deserializeobject.htm
Créez une classe avec la même structure que votre XML. Ensuite, votre variable s
est une instance de cette classe et vous pouvez désérialiser le json dans la structure de la classe.
Dans votre cas, votre propriété devrait être s.dialog.Prompt
.
Il y a trois façons qui me viennent à l’esprit.
En supposant que le json soit cohérent et que la structure de la réponse ne change pas souvent, j'utiliserais un outil tel que json2csharp ou jsonutils pour créer des classes c #.
puis appelez:
{GeneratedClass} obj = JsonConvert.DeserializeObject<{GeneratedClass}>(result);
Cela vous donnera un objet fortement typé que vous pouvez utiliser.
Vous pouvez ignorer la génération de classe et utiliser un objet dynamique:
dynamic obj = JsonConvert.DeserializeObject<dynamic>(result)
et accéder à des propriétés telles que:
obj.dialog.Prompt;
Vous pouvez utiliser un objet JObject et accéder à ses propriétés à l'aide de chaînes
JObject obj = JsonConvert.DeserializeObject(result);
obj["dialog"]["Prompt"]
Édité:
Importer Newtonsoft.Json
JObject s = JObject.Parse(result);
string yourPrompt = (string)s["dialog"]["Prompt"];
Avec:
using Newtonsoft.Json;
vous pouvez sauvegarder une étape en lisant directement le contenu en tant que JObject:
dynamic response = await response.Content.ReadAsAsync<JObject>();
string Prompt = response.dialog.Prompt.ToString();
Remarque: Cela nécessite que le contenu de la réponse soit de type de contenu "application/json".