【代码记录】C# 在JObject对象中搜索特定Key的值
背景:如果一个复杂的json对象,如果只是想获取其中一个key的值,建立一个 "Model"类,进行反序列化操作太麻烦,慢慢分析json结构,再提取也很麻烦。 在这里记录一下 提供的一个比较方便的方法轻易获取。
代码参考:c# - Searching for a specific JToken by name in a JObject hierarchy - Stack Overflow

public static partial class Extensions { /// <summary> /// JToken对象转换具体值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="containerToken"></param> /// <param name="name"></param> /// <returns></returns> public static T FindFirstTokenValue<T>(this JToken containerToken, string name) { return FindFirstToken(containerToken, name).Value<T>(); } /// <summary> /// JToken集合 对象转换具体值 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="containerToken"></param> /// <param name="name"></param> /// <returns></returns> public static T FindTokensValues<T>(this JToken containerToken, string name) { return FindTokens(containerToken, name).Value<T>(); } /// <summary> /// 根据Json的Key获取包含Value的JToken对象,返回对象集合中的默认一个,不存在返回Null。 /// </summary> /// <param name="containerToken"></param> /// <param name="name"></param> /// <returns>返回对象集合中的默认一个 JToken </returns> public static JToken FindFirstToken(this JToken containerToken, string name) { return FindTokens(containerToken, name).FirstOrDefault(); } /// <summary> /// 根据Json的Key获取包含Value的JToken对象,返回对象集合。 /// </summary> /// <param name="containerToken"></param> /// <param name="name"></param> /// <returns></returns> public static List<JToken> FindTokens(this JToken containerToken, string name) { List<JToken> matches = new List<JToken>(); FindTokens(containerToken, name, matches); return matches; } private static void FindTokens(JToken containerToken, string name, List<JToken> matches) { if (containerToken.Type == JTokenType.Object) { foreach (JProperty child in containerToken.Children<JProperty>()) { if (child.Name == name) { matches.Add(child.Value); } FindTokens(child.Value, name, matches); } } else if (containerToken.Type == JTokenType.Array) { foreach (JToken child in containerToken.Children()) { FindTokens(child, name, matches); } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!