如何使用JsonConvert.DeserializeObject()获取JSON中的points字段值
使用Json.NET获取指定JSON中points字段值的实现方案
你可以选择以下两种方式,通过JsonConvert.DeserializeObject()完成取值:
方案一:强类型反序列化(类型安全,推荐生产环境使用)
按照JSON的层级结构定义对应的C#实体类,反序列化后直接通过属性访问即可。
- 定义匹配结构的实体类
using Newtonsoft.Json; using System.Collections.Generic; // 最外层根结构 public class Root { public DataSection Data { get; set; } } public class DataSection { public List<Gamer> Gamers { get; set; } } public class Gamer { public string Id { get; set; } public System.DateTime StartTime { get; set; } public decimal Points { get; set; } // 对应points字段,小数场景用decimal精度更高,也可替换为double public HashDetail Hash { get; set; } } public class HashDetail { public string Id { get; set; } public string Hash { get; set; } [JsonProperty("__typename")] // 映射含特殊命名的字段 public string TypeName { get; set; } }
- 执行反序列化取值
// 替换为实际获取到的JSON字符串 string rawJson = "你的JSON文本内容"; // 注意:原始JSON中hash字段闭合花括号后存在多余逗号,需先移除避免JSON语法报错 Root result = JsonConvert.DeserializeObject<Root>(rawJson); // 遍历获取所有points值 if (result?.Data?.Gamers != null) { foreach (var gamer in result.Data.Gamers) { decimal points = gamer.Points; // 此处即可拿到对应points值,示例数据中该值为11.647601 } }
方案二:动态解析(无需预定义实体类,适合快速临时取值)
如果不想定义完整实体类,可以借助Json.NET的LINQ to JSON能力按层级直接索引取值:
using Newtonsoft.Json.Linq; using System.Collections.Generic; using System.Linq; string rawJson = "你的JSON文本内容"; JObject parsedObj = JObject.Parse(rawJson); // 批量获取所有Gamers下的points值 List<decimal> allPoints = parsedObj["data"]["Gamers"] .Select(g => g["points"].Value<decimal>()) .ToList(); // 仅取第一个Gamer的points值可直接写: // decimal firstPoints = parsedObj["data"]["Gamers"][0]["points"].Value<decimal>();
提示:如果JSON字段命名和C#属性命名不一致,可以给属性加
[JsonProperty("JSON中对应的字段名")]特性做映射,避免取值失败。
内容的提问来源于stack exchange,提问作者jefferson soares
相关产品推荐
相关产品推荐

