2012-03-04 23 views
15

Estoy intentando leer un archivo JSON y analizarlo. Tengo este código para la lectura de mi archivoCómo se analiza un archivo JSON utilizando JSON.net

StreamReader re = new StreamReader("artists.json"); 
JsonTextReader reader = new JsonTextReader(re); 

Pero ¿cómo puedo analizarlo ahora de lector para que pueda buscar los datos en el archivo?

he intentado leer el documentation pero no hemos podido encontrar nada

Respuesta

22
using Newtonsoft.Json; 

    //.. 

    JsonSerializer se = new JsonSerializer(); 
    object parsedData = se.Deserialize(reader); 
+8

Algunos detalles sobre cómo implementar esto serían útiles. – aknatn

2

en respuesta a "Algunos detalles sobre cómo implementar esto sería útil -. Aknatn"

using Newtonsoft.Json; 
using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Text; 

public class Program 
    { 
     public static void Main() 
     { 
      //JSON = {"Property1":"as","CollectionProperty":[{"prop1":"1","prop2":"2","prop3":"3"}]} 

      //This Top part is just to build a stream 
      //- No need to do this if you are accessing a file 
      string JSON = "{\"Property1\":\"SomePropName\",\"CollectionProperty\":"+ 
      "[{\"prop1\":\"1\",\"prop2\":\"2\",\"prop3\":\"3\"}]}"; 
      byte[] byteArray = Encoding.UTF8.GetBytes(JSON); 
      //byte[] byteArray = Encoding.ASCII.GetBytes(contents); 
      MemoryStream stream = new MemoryStream(byteArray); 
      // convert stream to string 

      JsonSerializer se = new JsonSerializer(); 

      StreamReader re = new StreamReader(stream); 
      JsonTextReader reader = new JsonTextReader(re); 
      var DeserializedObject = se.Deserialize<Collections>(reader); 

      Console.WriteLine(DeserializeObject.Property1); 

      //"...so I can search data from the file?" 
      //This is up to you and how you wanna handle it, but you now have JSON 
      //Deserialized and stored in memory. 'How to search' depends on objects class 
      //Also, Original question said he had the JSON. I would recommend using 
      //json2csharp.com/ or jsonutils.com/ 
      //to retrieve the classes in order to Deserialize it to your object. 

      //Note 1: You don't always have to cast it 
      //- I just always try to if and when I can 
      //Note 2: Because you are using a StreamReader, 
      //this will account for Large JSON Objects 
     } 


    public class Collections 
    { 
     public List<CollectionProperty> CollectionProperty = new List<CollectionProperty>(); 
     public string Property1; 
    } 

    public class CollectionProperty 
    { 
     public string prop1 { get; set; } 
     public string prop2 { get; set; } 
     public string prop3 { get; set; } 
    } 
    } 
1

Si desea para cargarlo en un JObject o tipo dinámico (y no deserializarlo en un tipo .NET), puede usar el JObject.Load método

using(var sr = new StreamReader("artists.json")) 
{ 
    var reader = new JsonTextReader(sr); 
    var jObject = JObject.Load(reader); 

    //Get property from JObject 
    var someValue = jObject.GetValue("someProperty").Value<string>(); 

    // JObject can be cast into a dynamic 
    var dObject = (dynamic)jObject; 
    someValue = (string)dObject.someProperty; 

} 
Cuestiones relacionadas