引言

目前解析 JSON 用的库主流有两种,System.Text.JsonJson.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"];

数据类型有 JArrayJObjectJProperty

类型转换

JPropertyJObject 类型使用 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);