C# 获取嵌套的json元素将返回一个错误

C# 获取嵌套的json元素将返回一个错误,c#,.net,json,json.net,webclient,C#,.net,Json,Json.net,Webclient,我正在尝试创建一个与randomuser.MeAPI交互的应用程序 但这总是会返回某种错误,这次我使用在stackoverflow中找到的代码来解析json内容。 这是我现在的代码: public string GetJsonPropertyValue(string json, string query) { JToken token = JObject.Parse(json); foreach (string queryC

我正在尝试创建一个与randomuser.MeAPI交互的应用程序 但这总是会返回某种错误,这次我使用在stackoverflow中找到的代码来解析json内容。 这是我现在的代码:

   public string GetJsonPropertyValue(string json, string query)
        {
            JToken token = JObject.Parse(json);

            foreach (string queryComponent in query.Split('.'))
            {
                token = token[queryComponent];
            }
            return token.ToString();
        }
        string getName()
        {
            string name = "";
            try
            {
                using (WebClient wc = new WebClient())
                {
                    var json = wc.DownloadString("https://randomuser.me/api/");
                    name = GetJsonPropertyValue(json, "results[0].name.first");

                    return name;
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.ToString());
                return name;
            }


        }
我不知道到底是什么问题,但它返回了一个
System.NullReferenceException

编辑 如果我没有在GetJsonPropretyValue group方法的第二个参数中插入索引,并以这种方式插入它
results.name.first
它返回这样一个错误:

System.ArgumentException:访问的JArray值的键值无效:>“名称”。应为数组位置索引

位于Newtonsoft.Json.Linq.JArray.get_项(对象键)


当路径中有数组索引时,尝试将JSON路径拆分为点是行不通的。幸运的是,您不必使用自己的查询方法;内置方法完全满足您的要求:

using (WebClient wc = new WebClient())
{
    var json = wc.DownloadString("https://randomuser.me/api/");
    JToken token = JToken.Parse(json);
    string firstName = (string)token.SelectToken("results[0].name.first");
    string lastName = (string)token.SelectToken("results[0].name.last");
    string city = (string)token.SelectToken("results[0].location.city");
    string username = (string)token.SelectToken("results[0].login.username");
    ...
}

Fiddle:

可能重复的,请参见Edit@dourhigharch原始JSON字符串是什么样子的?谢谢,这与预期的效果完全一样。很高兴我能提供帮助。