引言
目前解析 JSON 用的库主流有两种,System.Text.Json
和 Json.Net
其中 System.Text.Json
是官方库,但还很不成熟。Json.Net
虽然是第三方库但也有官方背书,在 Asp.Net
官方模板中是直接引入的,功能完备项目成熟。本篇记录一下 Json.Net
的使用方法。
准备工作
首先我们准备一份复杂嵌套的 .json
文件,比如 events.json
。
读取文件
using System.IO;
var jsonString = File.ReadAllText(@"./resource/events.json");
这里读取文件采用的是 File.ReadAllText
,因为要一次性读取所有内容。
反序列化
using Newtonsoft.Json.Linq;
void Deserialize(string jsonString)
{
dynamic data = JObject.Parse(jsonString);
...
}
取出的数据可以向 python 那样操作
data["AutoLock"];
data["Menu"]["Pet"];
data["BlackSpirit"]["DarkEnergy"]["AbsorbEnergy"];
数据类型有 JArray
、JObject
、JProperty
。
类型转换
JProperty
和 JObject
类型使用 ToObject<T>()
转换成 .Net 类型
data["AutoLock"][0]["Timestamp"].ToObject<int>();
data["AutoLock"][0]["EventType"].ToString();
JArray
类型需要使用 Linq,参考官方示例。
序列化
var jsonString = JObject.FromObject(obj).ToString(); // Serializing objects.
var jsonString = JsonConvert.SerializeObject(list, Formatting.Indented); // Serializing collections.
写入文件
File.WriteAllText(filePath, jsonString);