2011-02-09 7 views
5

Ho bisogno di navigare una struttura Json come vorrei navigare in XML usando XmlDocument.Come posso navigare in qualsiasi albero JSON in C#?

La struttura non è nota e ho bisogno di scorrere i nodi per analizzare alcuni dati.

È possibile?
So che posso usare lo JavaScriptSerializer per deserializzarlo in un tipo noto, ma questo non è il caso in quanto posso ricevere qualsiasi json valido.

Sto utilizzando .NET 3.5 (SP1) e non posso eseguire l'aggiornamento a 4.0 al momento.
ho aggiornato a .NET 4.0 per utilizzare i tipi dinamici (che è suggestione codice composto)

+0

possibile duplicato di [Parse JSON in C#] (http://stackoverflow.com/questions/1212344/parse-json-in-c) – Jason

+3

@Jason, questo non è un duplicato, specificamente dichiaro che non lo faccio conosco la struttura in modo da non poterla deserilizzare in un tipo noto. – juan

+0

Diritto; la domanda collegata è centrata su JSON.NET, non su JavaScriptSerializer. Il primo consente di camminare e ispezionare la struttura risultante, il secondo è per i tipi statici. – Jason

risposta

3

leggere questo articolo:

Esso si spiega un modo di parsing per JSON un oggetto dinamico che ha un dizionario dentro

Quindi, iterare un dizionario sarebbe bello con LINQ, non lo sarebbe?

--- O se siete in .NET 3.5 ... ---;)

Perché non è possibile realizzare un metodo di estensione del tipo "ToDictionary"?

È possibile ricevere testo JSON, analisi successiva con un'espressione regolare e dividere proprietà e valori in un dizionario, tutto eseguito con il metodo di estensione suggerito.

Un esempio di come avrebbe funzionato che:

IDictionary<string, object> deserializedJson = jsonText.ToDictionary(); 

si adatta alle vostre esigenze?

--- ANCORA ANCORA UN ALTRO PROVA (ora hai più opzioni)! ---

controllare questo progetto open source su CodePlex:

Ha LINQ to JSON in modo da poter leggere e scrivere JSON.

+0

Ho dimenticato di dire che sto usando .NET 3.5 (Modifica: Ma potrei usare quel qualcosa di JavaScriptConverter, ho intenzione di provarlo) – juan

+0

Ooops !! Bene, aggiornerò la mia risposta –

+0

Controlla il mio aggiornamento! –