2012-03-04 66 views
15

Tôi đang cố gắng đọc tệp JSON và phân tích cú pháp đó. Tôi có mã này để đọc từ tập tin của tôiLàm cách nào để phân tích cú pháp tệp JSON bằng cách sử dụng JSON.net

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

Nhưng làm thế nào để phân tích nó ngay bây giờ từ độc giả để tôi có thể tìm kiếm dữ liệu từ tập tin?

Tôi cố gắng đọc documentation nhưng không thể tìm thấy bất cứ điều gì

Trả lời

22
using Newtonsoft.Json; 

    //.. 

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

Một số chi tiết về cách triển khai điều này sẽ hữu ích. – aknatn

2

để đáp ứng với "Một số chi tiết về làm thế nào để thực hiện điều này sẽ rất hữu ích -. 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

Nếu bạn muốn để tải nó vào JObject hoặc động loại (và không loại bỏ nó thành loại .NET), bạn có thể sử dụng JObject.Load phương thức

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; 

} 
Các vấn đề liên quan