2011-07-29 23 views
5

Bir JSON dizgesini deserialize etmek için Newtonsoft'un Json.NET'i kullanıyorum:Dinamik boş ise nasıl kontrol edilir.

var output = JsonConvert.DeserializeObject<dynamic>("{ 'foo': 'bar' }"); 

output'ün boş olduğunu nasıl kontrol edebilirim? Örnek bir test örneği:

var output = JsonConvert.DeserializeObject<dynamic>("{ }"); 
Assert.IsNull(output); // fails 
+2

"{}" çıktısı boş/null mı? Özellikleri olmayan genel bir nesne oluşturmasını beklerdim. "[]" 'Nin serileştirilmesinin hiçbir öğe içermeyen bir dizi nesne oluşturmasını beklerdim. – nnnnnn

cevap

12

Eğer DeserializeObject geri almak nesne Count mülkü bulunan bir JObject, olacak. Bu özellik, nesne üzerinde kaç özellik bulunduğunu belirtir.

var output = JsonConvert.DeserializeObject<dynamic>("{ }"); 

if (((JObject)output).Count == 0) 
{ 
    // The object is empty 
} 

dinamik nesne boş ise bu söylemeyeceğim, ama bir Serileştirilmemiş JSON nesnesi boşsa o size söyleyecektir.

+0

[Dokümanlara göre] (http://james.newtonking.com/projects/json/help/html/M_Newtonsoft_Json_JsonConvert_DeserializeObject__1.htm), "DeserializeObject", "JObject" olmayacak olan "T" değerini döndürür. –

+4

dinamik gerçek bir tür değil, bu yüzden Json.NET JObject kullanmaya geri düşüyor. –

2

Ayrıca aşağıdaki kodla kontrol edebilirsiniz: benim için çalıştı

var output = JsonConvert.DeserializeObject<dynamic>("{ }"); 
if (output as JObject == null) 
{ 
} 

.

İlgili konular