Soru Json.NET'ten anahtarların listesini nasıl alabilirim?


C # ve Json.NET kullanıyorum. Eğer bir JObject'im varsa, nesnenin içindeki tuşların bir listesini istiyorum. object.Keys() Nesnelerin içindeki anahtarları döndürür. Bu açık gibi görünüyor, ama bunu yapmanın bir yolunu bulmakta zorlanıyorum.

Düzenle: Nesnenin içinden geçiyorum ve içeri girerken nesnenin içindeki bütün anahtarları tükürmek istiyorum. Bu örneğin birden çok kez aynı anahtarı görmeye başladığının farkındayım ve bu benim ihtiyaçlarım için sorun değil.

public void SomeMethod(JObject parent) {
    foreach (JObject child in parent.Children()) {
        if (child.HasValues) {
        //
        // Code to get the keys here
        //
        SomeMethod(child);
        }
    }
}

44
2018-06-29 14:28


Menşei


Kullandığınız bir kod örneği verebilir misiniz? Her neyse, bu JArray boyutları = (JArray) jObject ["Keys"]; - sll
Ne yazık ki bu başarılı değildi. object["Keys"] anahtarın değerini "Keys" adıyla döndürür - John


Cevaplar:


IList<string> keys = parent.Properties().Select(p => p.Name).ToList();

Belgeler: JObject.Properties


108
2018-06-30 02:35



Bu 5.0.8 sürümünden kaldırıldı mı? Çünkü artık bir JObject için Anahtarları alamıyorum. - aminjam
@bigaj Nope, o değil ... sadece bu tam kod 5.0.8 üzerinde test ve benim için iyi çalışıyor gibi görünüyor - Robert Petz
@ AJ AJ: System.Linq'i aldınız mı? Select () sorgusunu yapmak ve onsuz kullanılabilir olmayacaktır. - Wolfgang Schreurs
Bu yazıyı bulana kadar 2 saat harcadım - reza
bazı araştırmalardan sonra cevabımı buldum, vb.net'de bu sözdizimini kullanırdınız: Dim keys As List(Of String) = parent.Properties().Select(Function(p) p.Name).ToList() - JohnRDOrazio


itibaren JSON.NET JObject'in Özellikleri / Jetonlarını Sözlük Anahtarlarına Dönüştürme

Basitçe dönüştürebilirsiniz JObject bir Sözlük nesnesine girip yönteme erişin Keys() Sözlük nesnesinden.

Bunun gibi:

using Newtonsoft.Json.Linq;
//jsonString is your JSON-formatted string
JObject jsonObj = JObject.Parse(jsonString);
Dictionary<string, string> dictObj = jsonObj.ToObject<Dictionary<string, string>>();

Artık bu tuşlara dictObj.Keys() yöntem. Bir anahtarın var olup olmadığını görebilirsiniz. dictObj.ContainsKey(keyName) Ayrıca.

Açıkçası, Sözlük'ü istediğiniz gibi biçimlendirebilirsiniz ( Dictionary<string, object>, vb.).


7
2018-03-29 17:20