如何使用 LINQ 查询 JSON?



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,我将获得iddescriptionname值。

我在代码中使用了一个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");

在这种情况下,如果未找到此类客户端,则将nullclientWithName

这是一个演示完整解决方案的 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");

最新更新