背景:如果一個復雜的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); } } } }