Foreach和Json / Linq查询,这是一个bug还是我不明白?

时间:2017-02-02 06:25:14

标签: c# json linq loops

the link to Json objects greater than one

当我尝试使用Json文件中的对象数组获取值时,使用此代码时没有问题。

string _url = WebUtility.UrlDecode("https%3A%2F%2Fquery.yahooapis.com%2Fv1%2Fpublic%2Fyql%3Fq%3DSELECT%2520%2A%2520FROM%2520html%2520WHERE%2520url%253D%27https%253A%252F%252Fwww.themoviedb.org%252Fsearch%252Fmovie%253Fquery%253D"+titleStg+"%27%2520AND%2520xpath%253D%27%252F%252Fdiv%255B%2540class%253D%2522info%2522%255D%27%26format%3Djson%26callback%3D");
                   HttpClient cl = new HttpClient();
        var response = cl.GetStringAsync(_url).Result;
        var responsefilter = cl.GetStringAsync(urlfilter).Result;


        JObject json = JObject.Parse(response);
        //JObject jFilter = JObject.Parse(responsefilter);
        var movies = new List<Merge>();
        //var IDx = json["query"]["results"]["div"]["p"][0]["a"]["href"].ToString();
        foreach (var pchild in json["query"]["results"]["div"])
        {
            // ID
            var ID = pchild["p"][0]["a"]["href"].ToString();

            // title
            var titleSt = pchild["p"][0]["a"]["title"];
            var titleStr = titleSt != null ? titleSt.Value<string>() : string.Empty;

            // year
            var releaseDate = pchild["p"][1]["span"][0]["content"];
            string releaseYear = string.Empty;

            DateTime temp;
            if (releaseDate != null && DateTime.TryParse(releaseDate.Value<string>(), System.Globalization.CultureInfo.InvariantCulture, DateTimeStyles.None, out temp))
            {
                releaseYear = temp.Year.ToString();
            }

            // genres
            var genre = pchild["p"][1]["span"][1]["content"];
            var genreArr = genre != null
                            ? genre.Value<string>()
                                .Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)
                                .Select(st => st.Trim())
                                .ToArray()
                            : new string[0];

            movies.Add(
                new Merge
                {
                    Id = ID.ToString().ToString(),
                    Title = titleStr,
                    Year = releaseYear,
                    Genre = genreArr
                });
        }

一切正常,当我在Json数组中使用一个精确的一个Object的链接时,我收到一个错误。例如此链接Link with exactly one object

这是我得到的错误 -

  

System.InvalidOperationException:&#39;无法访问子值   Newtonsoft.Json.Linq.JProperty&#39;

当它是一个对象时使它工作的方法是删除循环并直接导航到像这样的值

var IDx = json["query"]["results"]["div"]["p"][0]["a"]["href"].ToString();

请我理解为什么会这样,以及如何正确地做到这一点。感谢

编辑:我可以使用

var query = (Int32)json["query"]["count"];
if (query > 1)
  {}
else
  {}

作为一个黑客,但我仍然认为我可能做错了。

0 个答案:

没有答案