我如何从HttpClient解析JSON字符串
本文关键字:解析 JSON 字符串 HttpClient | 更新日期: 2023-09-27 18:06:58
我通过调用外部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": []
}
]
},
"entities": [],
"dialog": {
"prompt": "1",
"parameterName": "1",
"parameterType": "1::1",
"contextId": "11",
"status": "1"
}
}}
我使用HttpClient
。我在访问prompt
键值时遇到困难。我想从dialog
得到prompt
。我怎样才能拿到呢?
我想到了三种方法。
-
假设json是一致的,响应的结构不会经常改变,我会使用json2sharp或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"];
你想看看这里:http://www.newtonsoft.com/json/help/html/deserializeobject.htm
创建一个具有与XML相同结构的类。然后你的变量s
是这个类的一个实例,你可以反序列化json到类结构。
在你的例子中,你的属性应该是s.dialog.prompt
。
像这样安装NuGet包Microsoft.AspNet.WebApi.Client:
PM> Install-Package Microsoft.AspNet.WebApi.Client
:
using Newtonsoft.Json;
您可以通过直接读取内容作为jobobject来节省一步:
dynamic response = await response.Content.ReadAsAsync<JObject>();
string prompt = response.dialog.prompt.ToString();
注意:这要求响应内容为content - type "application/json"