我怎么能得到一个元素在一个数组中基于值,而不是索引Json.. NET中的c#

本文关键字:一个 索引 Json 中的 NET 数组 怎么能 元素 于值 | 更新日期: 2023-09-27 18:17:55

所以我得到一个响应字符串:

{
    "travels": [
        {
            "date": "2015-10-15",
            "id": 5
        },
        {
            "date": "2015-10-14",
            "id": 2
        }
    ]
}

我将其输入JObject.Parse以获得一个JObject data。我知道我能做到:

data.SelectToken("travels(0).date")

选择第一个元素的日期。然而,我需要能够通过id而不是通过索引来选择元素,因为它不会每次都返回相同的元素。这可能吗?

我怎么能得到一个元素在一个数组中基于值,而不是索引Json.. NET中的c#

我会创建一个类,对它进行反序列化,然后使用LINQ:

进行过滤
void Main()
{
    var root = JsonConvert.DeserializeObject<RootObject>(json);
    var selectedTravel = root.Travels.FirstOrDefault(x => x.Id == 2);
}
public class Travel
{
    [JsonProperty("date")]
    public DateTime Date { get; set; }
    [JsonProperty("id")]
    public int Id { get; set; }
}
public class RootObject
{
    public List<Travel> Travels { get; set; }
}

只是补充@Yuval Itzchakov的答案—您可以使用LINQ完成此操作,而无需创建具体类:

JObject data = JObject.Parse(json);
int targetId = 2;
JObject result = data["travels"].Children<JObject>()
                                .FirstOrDefault(jo => (int)jo["id"] == targetId);
if (result != null)
    Console.WriteLine(result["date"]);
else
    Console.WriteLine("No object with id " + targetId + " was found");

小提琴:https://dotnetfiddle.net/kZSVVE