c# - 无法访问 Newtonsoft.Json.Linq.JValue 上的子值

标签 c# winforms json json.net

我正在使用 WinForms (C#) 查找 Google 和 Bing 中的排名和关键字位置。为此,我使用 Newtonsoft.Json.Net2.0.dll。当我运行该过程时,它显示错误:

Cannot access child value on Newtonsoft.Json.Linq.JValue.

我该如何解决这个问题?

public class GoogleSearch
{

    public int Search(string siteUrl, string searchExpression, ref string stage)
    {
        int position = 100;

        const string urlTemplate = @"http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=large&safe=active&q={0}&start={1}";
        var resultsList = new List<SearchType>();
        int[] offsets = { 0, 8, 16, 24, 32, 40, 48 };
        foreach (var offset in offsets)
        {
            var searchUrl = new Uri(string.Format(urlTemplate, searchExpression, offset));
            string page = new WebClient().DownloadString(searchUrl);
            JObject googleSearch = JObject.Parse(page);

            IList<JToken> results = googleSearch["responseData"]["results"].Children().ToList();//here i got the error ...

            IList<SearchType> searchResults = new List<SearchType>();


            foreach (JToken result in results)
            {
                SearchType searchResult = JsonConvert.DeserializeObject<SearchType>(result.ToString());
                resultsList.Add(searchResult);
            }
        }

        int i = 0;
        foreach (SearchType s in resultsList)
        {
            i = i + 1;
            if (s.Url.Contains(siteUrl))
            {
                position = i;
                return position;
            }
        }

        return position;
    }
}

最佳答案

这很可能是由于 NewtonSoft 库试图将对象绑定(bind)到不存在的属性。在行中

SearchType searchResult = JsonConvert.DeserializeObject<SearchType>(result.ToString());

由于结果包含 SearchType 中不存在的属性,反序列化可能会失败。

关于c# - 无法访问 Newtonsoft.Json.Linq.JValue 上的子值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5865309/

相关文章:

c# - C# 应用程序中的错误 [42000] MySQL

.net - 如何获取ToolStripButton的坐标?

c# - 如何使用 c# winform 将 10,000 行数据从存储过程移动到 excel

javascript - $.parseJSON - 未捕获的 SyntaxError - 如何检查未定义

c# - 如何创建 datagridview NumericUpDown 列

c# - 从 VS 2010 扩展在代码编辑器中打开无文件源代码文档

c# - C# 5 中的新异步/等待功能如何与消息循环集成?

winforms - Infragistics UltraCombo 上的预设值

Android 分页无尽的 ListView 不工作

android - 阻止非 Android 用户调用 JSON 服务