2011-07-29 22 views
5

estoy usando Json.NET de Newtonsoft deserializar una cadena JSON:Cómo verificar si dynamic está vacío.

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

¿Cómo puedo comprobar que output está vacía? Un ejemplo de caso de prueba:

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

¿La salida de "{}" debe estar vacía/nula? Esperaría que creara un objeto genérico sin propiedades. Esperaría que deserializar "[]" crearía un objeto de matriz sin elementos. – nnnnnn

Respuesta

12

El objeto que regrese de DeserializeObject va a ser un jobject, que tiene una propiedad Count. Esta propiedad te dice cuántas propiedades hay en el objeto.

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

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

Esto no le dirá si un objeto dinámico está vacía, pero le dirá si un objeto JSON deserializado está vacía.

+0

[Según los documentos] (http://james.newtonking.com/projects/json/help/html/M_Newtonsoft_Json_JsonConvert_DeserializeObject__1.htm), 'DeserializeObject' devuelve' T', que no será 'JObject'. –

+4

dinámico no es un tipo real, por lo que Json.NET vuelve a utilizar JObject. –

2

También puede comprobar con el siguiente código:

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

que trabajó para mí.

Cuestiones relacionadas