2015-10-15 26 views
1

所以我得到一個響應字符串:如何在基於值的數組中獲取元素而不是使用C#中的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而不是索引來選擇元素,因爲它不會每次都返回相同的元素。這可能嗎?

+2

任何理由你不使用一個類型的對象? –

+0

如果你可以得到Json到一個鍵入對象的集合,你可以使用Linq –

回答

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

哈哈。看到我對OP的評論... –

+0

坦克你!此解決方案工作:) – EJS

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

相關問題