Son*_*ali 18 c# json httpclient json.net
嗨我通过调用外部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";
}
Run Code Online (Sandbox Code Playgroud)
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"
}
}}
Run Code Online (Sandbox Code Playgroud)
我怎么能得到prompt'对话'?我正在使用http客户端.我在访问提示键值时遇到困难.我想从对话中得到提示.我怎么才能得到它?
Oma*_*abd 25
有三种方式可以想到.
假设json是一致的并且响应的结构不会经常变化,我会使用像json2csharp或jsonutils这样的工具来创建c#类.
然后打电话:
{GeneratedClass} obj = JsonConvert.DeserializeObject<{GeneratedClass}>(result);
Run Code Online (Sandbox Code Playgroud)
这将为您提供一个可以使用的强类型对象.
您可以跳过类生成并使用动态对象:
dynamic obj = JsonConvert.DeserializeObject<dynamic>(result)
Run Code Online (Sandbox Code Playgroud)
和访问属性,如:
obj.dialog.prompt;
Run Code Online (Sandbox Code Playgroud)您可以使用JObject并使用字符串访问其属性
JObject obj = JsonConvert.DeserializeObject(result);
obj["dialog"]["prompt"]
Run Code Online (Sandbox Code Playgroud)cem*_*zel 11
编辑:
导入Newtonsoft.Json
JObject s = JObject.Parse(result);
string yourPrompt = (string)s["dialog"]["prompt"];
Run Code Online (Sandbox Code Playgroud)
c0d*_*34n 10
你想看看这里: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
Run Code Online (Sandbox Code Playgroud)
和:
using Newtonsoft.Json;
Run Code Online (Sandbox Code Playgroud)
您可以通过直接将内容读取为 JObject 来节省一步:
dynamic response = await response.Content.ReadAsAsync<JObject>();
string prompt = response.dialog.prompt.ToString();
Run Code Online (Sandbox Code Playgroud)
注意:这要求响应内容的Content-Type为“application/json”。
| 归档时间: |
|
| 查看次数: |
50191 次 |
| 最近记录: |