2011-07-29 11 views
5

Używam Newtonsoft za Json.NET deserializacji ciąg JSON:Jak sprawdzić, czy dynamiczny jest pusty.

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

Jak mogę sprawdzić, że output jest pusty? Przypadek przykład testu:

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

Czy wyjście z "{}" powinno być puste/zerowe? Spodziewałbym się, że stworzy on ogólny obiekt bez właściwości. Spodziewam się, że deserialising "[]" stworzy obiekt tablicy bez elementów. – nnnnnn

Odpowiedz

12

Przedmiotem wrócisz z DeserializeObject ma być JObject, który ma właściwość Count. Ta właściwość określa liczbę właściwości obiektu.

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

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

To nie powie, czy obiekt dynamiczny jest pusty, ale powie ci, czy zserializowany obiekt JSON jest pusty.

+0

[Według dokumentów] (http://james.newtonking.com/projects/json/help/html/M_Newtonsoft_Json_JsonConvert_DeserializeObject__1.htm), 'DeserializeObject' zwraca' T', który nie będzie "JObject". –

+4

dynamic nie jest typem rzeczywistym, więc Json.NET wraca do używania JObject. –

2

Można również skontaktować się z następującego kodu:

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

który pracował dla mnie.

Powiązane problemy