2010-11-05 18 views
7

Ho circa 7000 righe di dati JSON che voglio analizzare. Un esempio di solo una parte di esso può essere visto here. Quello che ho fatto è stato utilizzare WebRequest e StreamReader per inserire tutti i dati in una stringa. (Stranamente, mette tutti i dati in una linea MOLTO lunga). Ma ora voglio analizzare questo e non sono sicuro di come. Qualcuno può spiegare come usare Deserialize? Ho analizzato i dati JSON con Java in precedenza, ma ho problemi a farlo con C# in particolare con la mia impossibilità di trovare la documentazione con esempi chiari. Qualsiasi aiuto sarà molto apprezzato.Analisi dei dati JSON con C#

+0

Vedi anche http://stackoverflow.com/questions/3905807/mapping-tool-for-converting-javas-json-to-from-c –

+0

http: // json.org - buon divertimento pulito con i collegamenti –

risposta

18

Prova JSON.Net, se non hai visto questo dovrebbe aiutarti.

La libreria Json.NET funziona con i dati formattati JSON in .NET semplice. Le funzioni principali includono un serializzatore JSON flessibile per la conversione rapida di classi .NET da a JSON e viceversa, e LINQ a JSON per la lettura e scrittura JSON.

Deserializzazione discussa here.

Il metodo più rapido di conversione tra testo JSON e un oggetto NET è usando l'JsonSerializer. Il JsonSerializer converte gli oggetti .NET nel loro equivalente JSON e di nuovo .

La struttura del codice di base per deserializzazione è inferiore - Target deve ancora essere compilata per catturare il resto degli elementi di dati analizzati con il tipo appropriato. Il file menzionato json.txt contiene i tuoi dati dall'URL sopra.

using System; 
using System.IO; 
using Newtonsoft.Json; 

public class NameAndId 
{ 
    public string name; 
    public int id; 
} 

public class Data 
{ 
    public NameAndId[] data; 
} 

public class Target 
{ 
    public string id; 
    public NameAndId from; 
    public Data likes; 
} 

public class Program 
{ 
    static void Main(string[] args) 
    { 
     string json = File.ReadAllText(@"c:\temp\json.txt"); 
     Target newTarget = JsonConvert.DeserializeObject<Target>(json); 
    } 
} 

Ecco la prima parte del flusso JSON per riferimento:

{ 
    "id": "367501354973", 
    "from": { 
     "name": "Bret Taylor", 
     "id": "220439" 
    }, 
    "message": "Pigs run from our house in fear. Tonight, I am wrapping the pork tenderloin in bacon and putting pancetta in the corn.", 
    "updated_time": "2010-03-06T02:57:48+0000", 
    "likes": { 
     "data": [ 
     { 
      "id": "29906278", 
      "name": "Ross Miller" 
     }, 
     { 
      "id": "732777462", 
      "name": "Surjit Padham" 
     }, 
+0

Potrebbe per favore darmi un esempio su come usarlo con il link che ho fornito? – Daisama

+0

@Daisama - Darò un'occhiata, ma ciò non accadrà molto rapidamente. –

+0

Grazie mille. – Daisama

9

Personalmente non mi piace portare in giro le dipendenze da librerie esterne quando la funzionalità viene fornita dal framework. In questo caso, la classe JavaScriptSerializer:

var serializer = new JavaScriptSerializer(); 

var myobj = serializer.Deserialize<MyType>(mystring); 
+0

concordato. Inoltre, ho utilizzato la classe DataContractJsonSerializer, che si trova nello spazio dei nomi System.Runtime.Serialization.Json (assembly System.Runtime.Serialization) agli oggetti JSon deserializzati: 'DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer (typeof (T)); return (T) jsonSerializer.ReadObject (memoryStream); ' –

+0

@ Dr.Wily'sApprentice: Quale riferimento o framework .net è necessario per quello, però? (modifica) Ah. 'System.ServiceModel.Web' apparentemente. – Nyerguds