如何在C#中基于值而不是使用Json.NET索引来获取数组中的元素?

时间:2015-10-15 13:58:22

标签: c# json json.net

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

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

我将JObject.Parse提供给JObject data。我知道我能做到:

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

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

2 个答案:

答案 0 :(得分:2)

我会创建一个类,反序列化它,然后用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; }
}

答案 1 :(得分:1)

只是为了补充@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