【发布时间】:2021-03-02 22:08:05
【问题描述】:
我一直在网络上来回搜索,但找不到关于我的问题的提示。
我正在通过 RestSharp Client 调用 REST API。我检索到这样的响应:
{
"meta": {
"query_time": 0.007360045,
"pagination": {
"offset": 1,
"limit": 100,
"total": 1
},
"powered_by": "device-api",
"trace_id": "a0d33897-5f6e-4799-bda9-c7a9b5368db7"
},
"resources": [
"1363bd6422274abe84826dabf20cb6cd"
],
"errors": []
}
我现在想查询resources的值。这是我使用的代码:
Dim id_request = New RestRequest("/devices/queries/devices/v1?filter=" + filter, Method.GET)
id_request.AddHeader("Accept", "application/json")
id_request.AddHeader("Authorization", "bearer " + bearer)
Dim data_response = data_client.Execute(id_request)
Dim data_response_raw As String = data_response.Content
Dim raw_id As JObject = JObject.Parse(data_response_raw)
Dim id = raw_id.GetValue("resources").ToString
很遗憾,我收到的只是["1363bd6422274abe84826dabf20cb6cd"],而不是1363bd6422274abe84826dabf20cb6cd
谁能指出我正确的方向?
我也尝试使用JsonConvert.DeserializeObject() 反序列化,但不知何故失败了。
我在这里找到了这个解决方案,但如果我尝试重建它会失败,因为它无法识别字典部分
Dim tokenJson = JsonConvert.SerializeObject(tokenJsonString)
Dim jsonResult = JsonConvert.DeserializeObject(Of Dictionary(Of String, Object))(jsonString)
Dim firstItem = jsonResult.Item("data").Item(0)
编辑:
当尝试按照建议反序列化根时,但似乎第二个响应是嵌套的 JSON。
我有这样的回复:
dr = {
"meta": {
"query_time": 0.004813129,
"powered_by": "device-api",
"trace_id": "5a355c86-37f7-416d-96c4-0c8796c940fc"
},
"resources": [
{
"device_id": "1363bd6422274abe84826dabf20cb6cd",
"policies": [
{
"policy_type": "prevention",
"policy_id": "1d34205a4e2c4d1991431c037c8e5734",
"applied": true,
"settings_hash": "7cb00a74",
"assigned_date": "2021-02-22T13:56:37.759459481Z",
"applied_date": "2021-02-22T13:57:19.962692301Z",
"rule_groups": []
}
],
"meta": {
"version": "352"
}
}
],
"errors": []
}
我试过了:
Dim restApiResponse = JsonConvert.DeserializeObject(Of RestApiResponseRoot)(dr)
' This is your array of strings
Dim resources = restApiResponse.Resources
不幸的是,我得到了 Newtonsoft.Json.JsonReaderException: '解析值时遇到意外字符: {.路径“资源”,第 8 行,位置 3。
【问题讨论】:
标签: json vb.net api json.net rest-client