2012-05-10 11 views
65

JObject'imdeki verilere nasıl erişeceğimi belirlemeye çalışıyorum ve hayatımın nasıl kullanılacağını belirleyemem.JObject aracılığıyla nasıl numaralandırırım?

JObject Object = (JObject)Response.Data["my_key"]; 

Ben Console.WriteLine (Object) yapıyor konsola yazdırabilirsiniz ve verileri görmek, bu gibi görünüyor:

{ 
"my_data" : "more of my string data" 
... 
} 

Ama sadece/yineleme numaralandırmak nasıl YOK fikrim yok Bu, herhangi bir fikri olan var mı? Şu anda böyle bir kayıp yaşıyorum.

cevap

103

the documentation for JObject'a bakarsanız, IEnumerable<KeyValuePair<string, JToken>> uygular. basitçe bir foreach kullanılmasına göre Yani, yineleme yapabilirsiniz: cevabı benim için işe yaramadı

foreach (var x in obj) 
{ 
    string name = x.Key; 
    JToken value = x.Value; 
    … 
} 
+3

Bu doğru, ancak anlamıyorum nedenlerden dolayı, açıkça sayılabilir türüne dökmediğiniz sürece bunu Linq ile kullanamazsınız. Yani you ((IEnumerable >) obj) .Sadece (eski) '' obj.elect (...) 'yerine (...)' yi seçin; ya da en azından ben onu kodumun bir parçası buldum. –

+1

@AdrianRatnapala Senin objektif dinamik ilan etti mi? Uzatma yöntemleri (Enumerable.Select gibi) bununla çalışmaz. – svick

+1

Hayır, benim davamda 'obj' tipi JObject' vardı; fakat “JObject”, “dinamik” ile benzer sorunlara sahip gibi görünüyor. Derleyici, tür argümanlarını '.Select' olarak değiştiremez. Bunları açıkça verebilirim, 'obj.Select , (sonuç türü)> (...) 'da benim için de çalışır –

8

. O kadar çok oy aldığını bilmiyorum. Yine de bana bir yöne işaret etmede yardımcı oldu. Başka içinde yuvalanmış bir JObject varsa

foreach (JProperty x in (JToken)obj) { // if 'obj' is a JObject 
    string name = x.Name; 
    JToken value = x.Value; 
} 

:

foreach (var x in jobj) 
{ 
    var key = ((JProperty) (x)).Name; 
    var jvalue = ((JProperty)(x)).Value ; 
} 
+1

Bununla birlikte (bu satırdan sonra: JObject priceComplianceJson = JObject.Parse (File.ReadAllText (fullPath));) "Type dönüştüremiyorum" System.Collections.Generic.KeyValuePair 'to' Newtonsoft.Json.Linq.JProperty '” Ancak, döküm işlerinin kaldırılması: var key = x.Key; var jvalue = x.Value; - En azından derler ... Yarın işlevselliği çekerim. –

26

JObjects bir JToken bunu döküm tarafından JProperty nesneler aracılığıyla sıralanabilir:

Bu benim için çalıştı cevaptır JObject, erişimci bir JToken:

foreach (JProperty x in obj["otherObject"]) { // Where 'obj' and 'obj["otherObject"]' are both JObjects 
    string name = x.Name; 
    JToken value = x.Value; 
} 
döndüreceği için yayınlamanız gerekmez
+2

Bu yararlı bilgiler için teşekkürler! – SimplyInk

+1

Ayrıca, linq'u şu şekilde kullanabilirsiniz: 'obj.Properties(). (P => p.Name +": "+ p.Value)' seçeneğini seçin. – itslittlejohn

İlgili konular