2010-11-05 14 views
7

Tengo alrededor de 7000 líneas de datos JSON que quiero analizar. Se puede ver un ejemplo de solo una parte de here. Lo que hice fue usar WebRequest y StreamReader para poner todos los datos en una cadena. (Curiosamente, pone todos los datos en una sola línea MUY larga). Pero ahora quiero analizar esto y no estoy seguro de cómo. ¿Alguien puede explicar cómo usar Deserialize? He analizado datos JSON con Java anteriormente, pero estoy teniendo problemas para hacerlo con C#, especialmente con mi incapacidad para encontrar documentación con ejemplos claros. Cualquier ayuda será apreciada.Análisis de datos JSON con C#

+0

Véase también http://stackoverflow.com/questions/3905807/mapping-tool-for-converting-javas-json-to-from-c –

+0

http: // json.org - buena diversión limpia con enlaces –

Respuesta

18

Pruebe JSON.Net, si no ha visto esto, debería ayudarlo.

biblioteca Json.NET hace que trabajar con JSON datos formateados en .NET simple. Las características clave incluyen un serializador JSON flexible para convertir rápidamente las clases .NET a JSON y viceversa, y LINQ a JSON para lectura y escribiendo JSON.

Deserialización discutida here.

El método más rápido de convertir entre el texto JSON y un objeto .NET es usando el JsonSerializer. El JsonSerializer convierte los objetos .NET en su equivalente JSON y vuelve a .

La estructura del código básico para deserialización es abajo - Target todavía tiene que ser llenado para capturar el resto de los elementos de datos analizados con el tipo apropiado. El archivo mencionado json.txt contiene sus datos de la URL anterior.

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); 
    } 
} 

Aquí está la primera parte de la corriente de JSON para referencia:

{ 
    "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

¿Podría darme un ejemplo sobre cómo usarlo con el enlace que proporcioné? – Daisama

+0

@Daisama - Voy a echar un vistazo, pero eso no sucederá muy rápido. –

+0

Muchas gracias. – Daisama

9

Personalmente no me gusta llevar alrededor de dependencias de bibliotecas externas cuando la funcionalidad es proporcionada por el marco. En este caso, la clase JavaScriptSerializer:

var serializer = new JavaScriptSerializer(); 

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

de acuerdo. Además, he utilizado la clase DataContractJsonSerializer, ubicada en el espacio de nombres System.Runtime.Serialization.Json (System.Runtime.Serialization assembly) para objetos JSon deserializados: 'DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer (typeof (T)); return (T) jsonSerializer.ReadObject (memoryStream); ' –

+0

@ Dr.Wily'sApprentice: ¿Qué referencia o .NET Framework se necesita para eso? (editar) Ah. 'System.ServiceModel.Web' al parecer. – Nyerguds