2011-11-07 14 views
9

Sto deserializzando una stringa JSON in un oggetto. Non riesco a utilizzare un Dictionary<string, string> perché il JSON all'interno è complesso. Conosco lo Dictionary<string, dynamic>, ma ho superato il framework .NET 3.5, quindi non posso usare dynamic.Deserializzazione JSON nell'oggetto

Così ho finito qui:

object json = new JavaScriptSerializer().Deserialize<object>("myjson"); 

Ma non vedo alcun modo per accedere json senza riflessione. Qualche consiglio?

+0

Non ho molta familiarità con questo dominio, quindi mi scuso se questa è una domanda stupida ... ma perché non puoi usare la reflection per accedere a 'json.html'? –

+1

Posso usare, ma penso che se ti vedi usando il riflesso nel mezzo di qualcosa di banale, stai facendo qualcosa di sbagliato. In questo caso, penso Im. –

risposta

14

Vorrei utilizzare ServiceStack.Text e analizzarlo utilizzando JsonObject.Parse.

Quindi hai un dizionario di dati che è facile da leggere.

ServiceStack è più veloce e migliore di Json.NET.

1

JSON.NET è un popolare libreria di serializzazione JSON, permette di serializzare il vostro digitato oggetti to/from JSON così come ottenere rappresentazioni digitato della meta-struttura (attraverso il JObject class) per quando non si conosce la struttura del il tuo JSON.

Ho trovato che sia migliore delle offerte che .NET viene fornito già per molte volte con JSON out-of-the-box.

11

Questo può essere fatto con ServiceStack's JsonSerializer facilmente come:

var dictionary = JsonSerializer.DeserializeFromString<Dictionary<string,string>>(myJson); 

è ancora più conciso se si utilizzano i metodi di estensione:

var dictionary = myJson.FromJson<Dictionary<string,string>>(); 

caso contrario, se si preferisce si può utilizzare l'API dinamica:

var jsonObj = JsonObject.Parse(myJson); 
var value = jsonObj.Get("key"); 

Qui ci sono un paio di usi del mondo reale che mostrano le differenze t modi si può deserializzare una dinamica JSON payload:

Come bonus che verrà usato .NET's fastest JSON serializer :)

di ServiceStack JSON Serializer è disponibile anche per il download su NuGet con:

PM> Install-Package ServiceStack.Text 
+0

Hi Demis, Ho un paio di domande 1. Per l'analisi di file json di grandi dimensioni è disponibile un'opzione di analisi JSON in streaming? 2. Quando il Json è incorporato nella parentesi quadra [], l'analisi fallisce c'è qualche metodo disponibile per sovrascriverlo? – Gokul

+0

1) No.2) Non capisco l'esempio, ma tutti i ganci di parsing + le personalizzazioni disponibili sono su 'JsConfig' e' JsConfig ' – mythz

+0

Grazie, Demis. Ho ricevuto il seguente errore "SerializationException: Le definizioni di tipo dovrebbero iniziare con un '{', in attesa di tipo serializzato 'RootObject', ottenuto stringa iniziando con:]" quando si cerca di analizzare l'oggetto json presente [Link-here] (http: // pastebin.com/WZTSbYNJ). Quando rimuovo il primo carattere nel file [e l'ultimo carattere] nel file, quindi sono in grado di analizzare correttamente. – Gokul

Problemi correlati