所以我得到一个响应字符串:
{
"travels": [
{
"date": "2015-10-15",
"id": 5
},
{
"date": "2015-10-14",
"id": 2
}
]
}
我将其输入JObject.Parse
以获得一个JObject data
。我知道我能做到:
data.SelectToken("travels(0).date")
选择第一个元素的日期。然而,我需要能够通过id而不是通过索引来选择元素,因为它不会每次都返回相同的元素。这可能吗?
我会创建一个类,对它进行反序列化,然后使用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