推特奇怪的错误

本文关键字:错误 | 更新日期: 2023-09-27 18:34:28

我有下面的方法来解析来自 Twitter 搜索的数据,奇怪的是这个方法在我的一种形式中工作正常,但在我的主形式中它返回异常:

例外:"System.Collections.Generic.Dictonary"不 包含"文本"的定义

这两种形式几乎相同,我不明白为什么我不能让代码工作......有人有任何想法吗?

以下是方法:

public static HashSet<string> searchTwitterJson(string searchTerm)
    {
        HashSet<string> resultsFound = new HashSet<string>();

        if (searchTerm != "")
        {
            string v = searchTerm.Replace("'"", "%22");
            string keyword = v.Trim();
            string keywordet = HttpUtility.UrlEncode(keyword);

            try
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://twitter.com/phoenix_search.phoenix?q=" + keywordet + "&headers[X-Twitter-Polling]=true&headers[X-PHX]=true&since_id=203194965877194752&include_entities=1&include_available_features=1&contributor_details=true&mode=relevance&query_source=unknown");
                var response = request.GetResponse();
                var reader = new StreamReader(response.GetResponseStream());
                var responseString = reader.ReadToEnd();
                string limit = response.Headers["X-RateLimit-Remaining"];

                var serializer = new JavaScriptSerializer();
                serializer.RegisterConverters((new[] { new DynamicJsonConverter() }));
                dynamic obj = serializer.Deserialize(responseString, typeof(object)) as dynamic;
                foreach (var objects in obj.statuses) 
                {
                    if ((objects.text != null) && (objects.user.screen_name != null) && (objects.id_str != null))
                    {
                        Match m = Regex.Match(objects.text, @"(http(s)?://)?(['w-]+'.)+['w-]+(/'S'w['w- ;,./?%&=]'S*)?");

                        if (!m.Success)
                        {
                            string loggaD = objects.user.screen_name.ToString() + "/" + objects.id_str.ToString();
                            resultsFound.Add(loggaD);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
        else
        {
            MessageBox.Show("No searchterm");
        }
        return resultsFound;
    }

我收到的部分 JSON:

{
    "error": null,
    "statuses": [{
        "in_reply_to_status_id_str": null,
        "id_str": "203239104421445632",
        "truncated": false,
        "possibly_sensitive": false,
        "created_at": "Thu May 17 21:42:33 +0000 2012",
        "in_reply_to_user_id_str": null,
        "contributors": null,
        "favorited": false,
        "geo": null,
        "user": {
            "screen_name": "YouthNorrort"
        },
        "in_reply_to_screen_name": null,
        "coordinates": null,
        "retweet_count": 0,
        "source": "'u003Ca href='"http:'/'/www.facebook.com'/twitter'" rel='"nofollow'"'u003EFacebook'u003C'/a'u003E",
        "place": null,
        "in_reply_to_status_id": null,
        "id": 203239104421445632,
        "retweeted": false,
        "in_reply_to_user_id": null,
        "text": "Hejsan igen!'nvi 'u00e4r ledsna att meddela er, men inf'u00f6r imorgon s'u00e5 finns det inga bilar, allts'u00e5 inte heller plats f'u00f6r... http:'/'/t.co'/pMKoOz7o",
        "result_category": "recent"
    }

推特奇怪的错误

错误指出响应不包含"状态"下节点上的项目。检查正在返回的 JSON,如果没有它,则无法尝试访问它。

{
    "statuses":
    [
        {
            "text": ...,
            "user: { "screen_name": ... }
        }
    ]
}

代码:

 if ((objects.text != null) && (objects.user.screen_name != null) && (objects.id_str != null))

更新:根据您的 JSON 示例,它工作正常(见下文(。状态数组中的所有元素都包含"text"成员吗?

    public static void Test()
    {
        string json = @"{
""error"": null,
""statuses"": [{
    ""in_reply_to_status_id_str"": null,
    ""id_str"": ""203239104421445632"",
    ""truncated"": false,
    ""possibly_sensitive"": false,
    ""created_at"": ""Thu May 17 21:42:33 +0000 2012"",
    ""in_reply_to_user_id_str"": null,
    ""contributors"": null,
    ""favorited"": false,
    ""geo"": null,
    ""user"": {
        ""screen_name"": ""YouthNorrort""
    },
    ""in_reply_to_screen_name"": null,
    ""coordinates"": null,
    ""retweet_count"": 0,
    ""source"": ""'u003Ca href='""http:'/'/www.facebook.com'/twitter'"" rel='""nofollow'""'u003EFacebook'u003C'/a'u003E"",
    ""place"": null,
    ""in_reply_to_status_id"": null,
    ""id"": 203239104421445632,
    ""retweeted"": false,
    ""in_reply_to_user_id"": null,
    ""text"": ""Hejsan igen!'nvi 'u00e4r ledsna att meddela er, men inf'u00f6r imorgon s'u00e5 finns det inga bilar, allts'u00e5 inte heller plats f'u00f6r... http:'/'/t.co'/pMKoOz7o"",
    ""result_category"": ""recent""
}]}";
        JavaScriptSerializer jss = new JavaScriptSerializer();
        jss.RegisterConverters(new[] { new DynamicJsonConverter() });
        dynamic obj = jss.Deserialize(json, typeof(object)) as dynamic;
        foreach (var objects in obj.statuses)
        {
            Console.WriteLine(objects.GetType());
            if (objects.ContainsKey("text"))
            {
                if ((objects.text != null) && (objects.user.screen_name != null) && (objects.id_str != null))
                {
                    Match m = Regex.Match(objects.text, @"(http(s)?://)?(['w-]+'.)+['w-]+(/'S'w['w- ;,./?%&=]'S*)?");
                    if (!m.Success)
                    {
                        string loggaD = objects.user.screen_name.ToString() + "/" + objects.id_str.ToString();
                        Console.WriteLine(loggaD);
                    }
                }
            }
        }

以及 TryInvokeTMember 的代码:

            public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
            {
                if (binder.Name == "ContainsKey")
                {
                    result = _dictionary.ContainsKey(args[0] as string);
                    return true;
                }
                else
                {
                    return base.TryInvokeMember(binder, args, out result);
                }
            }