2012-03-04 141 views
15

我想读取JSON文件并解析它。我有从我的文件如何使用JSON.net解析JSON文件

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

阅读此代码,但我现在该如何解析它的读者,所以我可以从文件中搜索数据?

我试着读documentation但找不到任何

回答

22
using Newtonsoft.Json; 

    //.. 

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

有关如何实现这一点的一些细节将是有帮助的。 – aknatn 2015-03-20 00:50:58

2

在回答“如何实现这个的一些细节将是有益的 - 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

如果你想将其加载到JObject动态类型(而不是将其反序列化为.NET类型),则可以使用JObject.Load方法

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; 

}