最推荐用 Newtonsoft.Json 的 JObject 动态解析或 JsonConvert.DeserializeObject 强类型反序列化;JObject 适合动态/不确定结构,支持 SelectToken、TryGetValue 和链式访问;强类型适用于固定结构,更安全易维护。

用 C# 解析 JSON 并获取特定值,最常用、最推荐的方式是使用 Newtonsoft.Json(即 Json.NET)库中的 JObject 类。它支持灵活的路径查询、动态属性访问和类型安全转换。
通过属性名直接访问节点
如果 JSON 结构明确且层级较浅,可直接用点号或索引器获取子节点:
-
jObj["name"]获取顶层字段(返回JToken) -
jObj["user"]["age"].ToString()链式访问嵌套字段 -
(int)jObj["count"]强制转换为指定类型(会抛异常,建议配合TryGetValue)
使用 SelectToken 安全提取任意路径值
支持 JSONPath 语法,适合动态路径或存在可选字段的场景:
-
jObj.SelectToken("$.data.items[0].title")—— 获取数组第一个元素的 title -
jObj.SelectToken("user.address?.city")—— 使用空合并操作符(?)避免空引用 - 返回
null而非异常,适合不确定结构时的安全读取
用 TryGetValue 避免运行时异常
比直接索引更健壮,尤其处理可能缺失的字段:
if (jObj.TryGetValue("status", out JToken statusToken)) { ... }- 支持嵌套:先取外层对象
if (jObj.TryGetValue("config", out JToken config) && config is JObject cfg),再查 cfg 内字段 - 配合
ToObject可直接映射为自定义类()
反序列化为强类型对象(推荐用于固定结构)
比纯 JObject 更安全、易维护,尤其适合业务模型明确的场景:
- 定义匹配 JSON 字段的 C# 类(属性名一致或加
[JsonProperty("api_name")]) var user = JsonConvert.DeserializeObject(jsonString); - 后续直接用
user.Name、user.Orders[0].Amount访问,无需字符串键或类型转换
基本上就这些。JObject 适合快速解析和动态场景,强类型反序列化更适合长期维护的业务代码。两者可混合使用——比如先用 JObject 提取关键标识字段,再对某段子 JSON 做强类型解析。










