C# 如何从动态超嵌套Json中通过键获取值?

C# 如何从动态超嵌套Json中通过键获取值?,c#,C#,JSON链接 我有一个动态嵌套的json。我有一个使用key的key,我需要从json中找出值。 N:B我不知道密钥的父节点。 请参考链接,如果我传递一个键,如果该键在json中的任何级别都存在,那么它应该返回值 我尝试了以下代码,但没有得到结果 public static TType JsonValue<TType>(this JObject obj, string key) { object result = null; //default to null if noth

JSON链接

我有一个动态嵌套的json。我有一个使用key的key,我需要从json中找出值。 N:B我不知道密钥的父节点。 请参考链接,如果我传递一个键,如果该键在json中的任何级别都存在,那么它应该返回值

我尝试了以下代码,但没有得到结果

public static TType JsonValue<TType>(this JObject obj, string key)
{
    object result = null; //default to null if nothing is found

    foreach (var item in obj)
    {
        var token = item;

        if (token.Key.Equals(key, StringComparison.InvariantCultureIgnoreCase))
        {
            result = token.Value.ToObject<TType>(); //return the value found
            break;
        }

        if (!obj[token.Key].Children().Any())
            continue;

        var jt = obj[token.Key].ToString();

        if (!jt.StartsWith("["))
        {
            result = JsonValue<TType>(JObject.Parse(jt), key);
        }
        else
        {
            obj[token.Key].Children().ToList().ForEach(x =>
            {
                //only the first match will be returned
                result = JsonValue<TType>(JObject.Parse(x.ToString()), key);
            });
        }

        if (result != null)
            break;
    }
    return (TType)result;
}
publicstaticttype JsonValue(此JObject对象,字符串键)
{
object result=null;//如果找不到任何内容,则默认为null
foreach(obj中的var项目)
{
var标记=项目;
if(token.Key.Equals(Key,StringComparison.InvariantCultureIgnoreCase))
{
result=token.Value.ToObject();//返回找到的值
打破
}
如果(!obj[token.Key].Children().Any())
继续;
var jt=obj[token.Key].ToString();
如果(!jt.StartsWith(“[”))
{
result=JsonValue(JObject.Parse(jt),key);
}
其他的
{
obj[token.Key].Children().ToList().ForEach(x=>
{
//只返回第一个匹配项
result=JsonValue(JObject.Parse(x.ToString()),key);
});
}
如果(结果!=null)
打破
}
返回(TType)结果;
}

也许值得尝试XPath表达式?特别是如果您有没有模式的动态json,无法下载json文件,请尝试这个可能的副本,区别在哪里?