2011-10-21 19 views
6

sto usando la libreria simplejson da qui: http://simplejson.codeplex.com/.Net simplejson: Deserialize JSON per oggetto dinamico

mi piacerebbe deserializzare una stringa JSON a un oggetto dinamico come questo:

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

var test = json.foo; 

La parte di deserializzazione funziona correttamente, ma chiamando json.foo genera una RuntimeBinderException con il messaggio di errore 'SimpleJson.JsonObject' does not contain a definition for 'foo'.

Come posso deserializzare una stringa JSON utilizzando SimpleJson e accedere alle proprietà dinamiche utilizzando la sintassi json.foo?

risposta

9

Bene, si tratta solo di leggere il codice sorgente per SimpleJson. :-) Una riga deve essere decomposta per supportare la sintassi dinamica che sto cercando. Non sono sicuro del motivo per cui questo non è abilitato di default.

Dal codice sorgente:

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

Questo è un commento giusto, L.B. Non riesco a eliminare la domanda, quindi spero che questo serva da utile artefatto per gli altri che installano SimpleJson tramite NuGet e si imbattono nello stesso problema di me. –

+1

+1 per essermi stato utile. –

2

Guardando i campioni, le proprietà JsonObject sono accessibili come un dizionario. Quindi invece di json.foo, avresti bisogno di json["foo"].

In questo caso si sta peggio usando dynamic, poiché non c'è nulla di dinamico al riguardo: il metodo restituisce JsonObject, che semplicemente non ha un membro foo. Se non avessi usato dynamic, avresti potuto ottenere quel messaggio di errore in fase di compilazione.

Se si guarda il link L.B. fornito, mostra come implementare questa funzionalità dinamica da solo.

1

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

Problemi correlati