如何使用 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】:如果要将其加载到 JObject 或 dynamic 类型(而不是将其反序列化为 .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 使用十六进制编码字符解析格式错误的 JSONP?