如何使用 JSON.net 解析 JSON 文件

Posted

技术标签:

【中文标题】如何使用 JSON.net 解析 JSON 文件【英文标题】:How do you parse a JSON file using JSON.net 【发布时间】:2012-03-04 04:49:04 【问题描述】:

我正在尝试读取 JSON 文件并对其进行解析。我有这个代码可以从我的文件中读取

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

但是我现在如何从阅读器中解析它,以便我可以从文件中搜索数据?

我尝试阅读documentation,但找不到任何东西

【问题讨论】:

【参考方案1】:
    using Newtonsoft.Json;

    //..

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

【讨论】:

一些关于如何实现这一点的细节会有所帮助。【参考方案2】:

如果要将其加载到 JObjectdynamic 类型(而不是将其反序列化为 .NET 类型),可以使用 @ 987654321@方法

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;


【讨论】:

【参考方案3】:

回应“关于如何实现这一点的一些细节会有所帮助。-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; 
    
  

【讨论】:

我会这样做,流阅读器不会有任何价值。如果我把它读到最后,读到一个字符串,数据就在那里。我做错了什么?

以上是关于如何使用 JSON.net 解析 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 JSON.NET 库的情况下解析 JSON?

如何在没有JSON.NET库的情况下解析JSON?

如何使用 JSON.NET 使用十六进制编码字符解析格式错误的 JSONP?

如何在 C# 中动态转换来自 Json.NET 的解析 JSON 结果?

如何解析JSON.NET中的匿名数组?

如何使用 Json.NET 更改 JSON 属性的值? [关闭]