2012-04-02 24 views
10

ile dizi içindeki öğeleri seçme Bir json yanıtından bazı değerler seçmem gerekiyor. Ben json.net kullanarak, daha basit şeyler ile iyi, ama geçmişte bir şey üzerinde çok dokümantasyon/öğreticiler gibi görünmüyor.JSON.NET Linki

var stuff = response["teacherHolder"].Children()["students"]; 

var names = from y in stuff.Children().Values() 
        select y["name"]; 

ve bu:

var names= response["teacherHolder"] 
      .Select(s => (string)s.SelectToken("students[0].name")).ToList(); 

bu ve diğer varyasyonları denedim

{ 
"teacherHolder": [{ 
    "id": 200000001, 
    "name": "Mr Test", 
    "class": "a4", 
    "students": [{ 
     "id": "100532469", 
     "name": "ben" 
    }, 
    { 
     "id": "100506025", 
     "name": "bill" 
    }, 
    { 
     "id": "100000447", 
     "name": "bob" 
    }] 

}] 

}: json örnekte ben her yaşa seçmeniz gerekir altına cevap bir web sitesinden bir JObject. Sadece bu geri almak: Sonuçlar sonunda bir sözlüğe konur

[{"Key":"Newtonsoft.Json.Linq.JEnumerable`1[Newtonsoft.Json.Linq.JToken]","Value":"Newtonsoft.Json.Linq.JEnumerable`1[Newtonsoft.Json.Linq.JToken]"}] 

.

Bunu nasıl yapacağınıza dair bir fikriniz var mı? Basit olacağını biliyorum, sadece doğru kombinasyonu buldum. Başka bir seçenek olarak,

var students = response["teacherHolder"].Children()["students"]; 

var names = students.Children()["name"]; 

Veya:: Tüm öğretmenlerin tüm öğrencilerin isimlerini almak istiyorsanız

cevap

20

, böyle mesela bunu yapabilir

var names = from teacher in response["teacherHolder"] 
      from student in teacher["students"] 
      select student["name"]; 

İsterseniz Onları IEnumerable<string> olarak, select'un sonuna Value<string>() ekleyin. Veya ilk seçenekle Values<string>() ekleyin.

Ancak, nesne modeliniz için türler oluşturmak genellikle daha iyidir, böylece bazı özel JSON nesneleriyle değil, normal nesnelerle birlikte çalışabilirsiniz.

Eğer böyle bir şey yapabileceğini, o varsa: İlk yöntem kullanılarak

var names = from teacher in response.TeacherHolder 
      from student in teacher.Students 
      select student.Name; 
+0

Merhaba svick im - ama is back alıyorum: {Newtonsoft.Json.Linq.JEnumerable } isimler değişkeni? – gdp

+1

Evet, bu yüzden 'string's koleksiyonunu istiyorsanız, () Değerlerini eklemeniz gerektiğini söyledim. – svick

+1

Merhaba svick () sonuna değer ekledim. şimdi: var names = students.Children() ["name"] Değerler (); – gdp