JSON
{
"count": 3,
"value": [
{
"id": "AAAAAAAAAAAAA",
"description": "test1",
"name": "name1"
},
{
"id": "BBBBBBBBBB",
"description": "test2",
"name": "name2"
},
{
"id": "CCCCCCCCCCCC",
"description": "test3",
"name": "name3"
}
]
}
我的解决方案中有一个代码,从 LIST API 检索并提供上面的 JSON。 如何使用 LINQ 检索特定值?(例如(我需要选择name1
,我将获得id
,description
,name
值。
我在代码中使用了一个dynamic
变量:
dynamic json = JObject.Parse(client.GetString().Result);
在过去的几个小时里,我一直在修补其他在线指南。但是,无法获得正确的结果。
请帮忙。
一种解决方案是将 JSON 字符串反序列化为 C# 对象,然后使用 Linq 获取特定对象。
C# 类定义:
public class Content
{
[JsonProperty("count")]
public int Count { get; set; }
[JsonProperty("value")]
public List<Value> Values { get; set; }
public Content()
{
Values = new List<Value>();
}
}
public class Value
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("description")]
public string Description { get; set; }
[JsonProperty("name")]
public string Name { get; set; }
}
反序列化和获取对象:
string json = @"{
""count"": 3,
""value"": [
{
""id"": ""AAAAAAAAAAAAA"",
""description"": ""test1"",
""name"": ""name1""
},
{
""id"": ""BBBBBBBBBB"",
""description"": ""test2"",
""name"": ""name2""
},
{
""id"": ""CCCCCCCCCCCC"",
""description"": ""test3"",
""name"": ""name3""
}
]
}";
Content content = JsonConvert.DeserializeObject<Content>(json);
Value value = content.Values.FirstOrDefault(x => x.Name.Equals("name1", StringComparison.InvariantCultureIgnoreCase));
首先,您可以创建一个类来表示客户端:
public class Client
{
public string Id { get; set; }
public string Description { get; set; }
public string Name { get; set; }
}
使用此类,您可以使用JObject.Parse
(就像您已经在做的那样(将 JSON 解析为可以查询的内容,使用SelectToken
拉出value
数组,然后使用ToObject
将其转换为Client
的列表。如下所示:
var jsonObject = JObject.Parse(json_source);
var jsonObjectValue = jsonObject.SelectToken("value");
var clients = jsonObjectValue.ToObject<List<Client>>();
获得clients
变量后,可以使用简单的 LINQ 语句查找name1
变量:
var clientWithName1 = clients.SingleOrDefault(x => x.Name == "name1");
在这种情况下,如果未找到此类客户端,则将null
clientWithName
。
这是一个演示完整解决方案的 dotnetfiddle。
创建具有属性 ID、说明和名称的对象客户端。将 json 反序列化为这些对象的列表。
List<Client> clients = JsonConvert.Deserialize<List<Client>>(json_source);
string desc = clients[0].description;
显然,通过摆弄我的代码,我为自己找到了答案。 感谢那些试图帮助我给我想法的人。
var requestWorkProcess = await client.GetStringAsync("my url");
var workProcessId = JObject.Parse(requestWorkProcess)["value"].Children<JObject>().FirstOrDefault(o => o["name"].ToString() == workProcess).GetValue("id");