所以我得到一个响应字符串:
{
"travels": [
{
"date": "2015-10-15",
"id": 5
},
{
"date": "2015-10-14",
"id": 2
}
]
}
我将JObject.Parse
提供给JObject data
。我知道我能做到:
data.SelectToken("travels(0).date")
选择第一个元素的日期。但是我需要能够通过id而不是index来选择元素,因为它不会每次都返回相同的元素。这可能吗?
答案 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");