Twitter:无法将JSON数组反序列化为对象,因为该类型需要JSON对象

时间:2013-11-06 00:27:42

标签: c# json.net tweetsharp

我正在使用TweetSharp来检索推文,而这些推文又使用了Newtonsoft的JSON.NET。这是应用程序代码,非常简单。

ListTweetsOnUserTimelineOptions listTweetsOnUserTimelineOptions =
    new ListTweetsOnUserTimelineOptions();
listTweetsOnUserTimelineOptions.ScreenName = "MarilynDenisCTV";
listTweetsOnUserTimelineOptions.IncludeRts = false;

var tweets = twitterService.ListTweetsOnUserTimeline(listTweetsOnUserTimelineOptions).Take(50);

有一条推文给我带来了麻烦。我得到的例外是TweetSharp源码中的这行代码。

public virtual object DeserializeJson(string content, Type type)
{
    using (var stringReader = new StringReader(content))
    {
       using (var jsonTextReader = new JsonTextReader(stringReader))
       {
           return _serializer.Deserialize(jsonTextReader, type);
       }
    }
}

这是我得到的例外

Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'TweetSharp.TwitterStatus' because the type requires a JSON 

object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a 

type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. 

JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.
Path '',

我从TweetSharp下载了最新的来源,但这似乎没有帮助,任何想法为什么?还有一件事,一个问题推文以[{“created_at”:“Sun Nov 03 21:44:51 +0000 2013”​​开头,应该是{“created_at”:“Sun Nov 03 21:44:51 +0000 2013 “,它有额外的方括号。

1 个答案:

答案 0 :(得分:2)

好的,通过一些调查,我可以在调试我的应用程序时深入研究TweetSharp的源代码。

JSON反序列化器在我的情况下抛出异常的原因是因为一些用户在他们的推文中加入了表情符号,比如笑脸,悲伤的面孔。那些表情符号缺点在传递给JSON之前没有编码,因此这就是打破JSON Deserailizer的原因。

我没有时间对Tweetsharp代码进行任何更改,因为在工作中我们正在切换到另一个库。内容团队刚刚删除了那些编码错误的表情符号的推文。那是一个快速而又肮脏的修复