推特奇怪的错误
本文关键字:错误 | 更新日期: 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);
}
}