2011-10-21 23 views
6

estoy usando la biblioteca simplejson desde aquí: http://simplejson.codeplex.com/.Net simplejson: Deserialize JSON al objeto dinámico

me gustaría deserializar una cadena JSON a un objeto dinámico como este:

dynamic json = SimpleJson.SimpleJson.DeserializeObject("{\"foo\":\"bar\"}"); 

var test = json.foo; 

La parte de deserialización funciona correctamente, pero al llamar a json.foo lanza una excepción RuntimeBinderException con el mensaje de error 'SimpleJson.JsonObject' does not contain a definition for 'foo'.

¿Cómo puedo deserializar una cadena JSON utilizando SimpleJson y acceder a las propiedades dinámicas usando la sintaxis json.foo?

Respuesta

9

Bueno, solo es cuestión de leer el código fuente de SimpleJson. :-) Una línea necesita ser descomentada para soportar la sintaxis dinámica que estoy buscando. No estoy seguro de por qué esto no está habilitado por defecto.

A partir del código fuente:

// NOTE: uncomment the following line to enable dynamic support. 
//#define SIMPLE_JSON_DYNAMIC 
+2

Eso es un comentario justo, L. B. No puedo eliminar la pregunta, así que espero que sirva como un artefacto útil para otros que instalan SimpleJson a través de NuGet y se encuentran con el mismo problema que yo. –

+1

+1 por ser útil para mí. –

2

En cuanto a las muestras, se accede a las propiedades JsonObject como un diccionario. Entonces, en lugar de json.foo, necesitaría json["foo"].

En este caso, está peor utilizando dynamic, ya que no tiene nada de dinámico: el método devuelve JsonObject, que simplemente no tiene un miembro foo. Si no ha usado dynamic, podría haber recibido ese mensaje de error en tiempo de compilación.

Si echas un vistazo al enlace L.B. siempre, muestra cómo implementar esta funcionalidad dinámica usted mismo.

1

> csc/t: library/d: SIMPLE_JSON_DYNAMIC SimpleJson.cs

Cuestiones relacionadas