【问题标题】:Twitter : Cannot deserialize a JSON array into an object because the type requires a JSON objectTwitter:无法将 JSON 数组反序列化为对象,因为该类型需要 JSON 对象
【发布时间】:2013-11-06 00:27:41
【问题描述】:

我正在使用 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 ",它有额外的方括号。

【问题讨论】:

  • 似乎您知道问题出在哪里......额外的“[”。要么删除它(你有字符串),要么写信给他们抱怨他们没有涵盖最终情况......
  • 好吧,Tweetsharp 不再受支持。所以我将不得不删除额外的 [.但我很想知道为什么其他人没有遇到同样的问题,以及为什么只有一条推文特别给出了问题
  • 我也有同样的问题。但我也读到 TweetSharp 自 2.3.1 起停止了其开发。 (如您所知)因此,如果自上次发布以来 Twitter API 发生任何更改。您将不得不更改库。哪个 s*cks 因为它是我正在使用的第二个库。首先是 Twitter2lite,现在是 Tweetsharp,啊(见我的沮丧)
  • 试试 TweetInvi。那是我正在试验的新的
  • @doglin 一个旧帖子,但我刚刚遇到这个问题,我继承了一个最初外包的项目。推文停止工作,所以留给我修复。我理解了这个错误,但修复起来很棘手...... 2 小时后,仍然无法正常工作。

标签: c# json.net tweetsharp


【解决方案1】:

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

在我的情况下,JSON 反序列化器抛出异常的原因是,一些用户在他们的推文中使用了 emoji cons,比如笑脸、悲伤的脸。这些表情符号在传递给 JSON 之前没有被编码,因此这就是破坏 JSON Deserailizer 的原因。

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

【讨论】:

  • 我们通过查看源代码并构建自身和更新版本的 JSON 反序列化器解决了这个问题。似乎没有引起任何问题,但不再重要了,因为我们决定进行自己的 API 实现。我们正在使用的 Twitter 库第二次被弃用。
  • @IanS。你推送了一个提交吗?如果是这样,我在哪里可以获取副本?或者你能解释一下必要的改变吗?我真的很感激。谢谢。
  • @doglin 你们最终使用了哪个库?谢谢。
  • @Paul 我不确定我是否做到了,但我不是 OP,所以也许你应该将问题指向他们,因为他们可能有解决方案。那是很久以前的事了,但我想最后我只是做了一些 try / catch 子句,所以任何引起问题的推文都被丢弃了。
  • @PhillHealey 感谢您的回复。这正是我最终所做的。这似乎与某个已连接到它的回复的推文有任何问题,因此我将排除回复设置为 true 并将其包装在 try catch 中以确保安全。不理想,但似乎工作正常。感谢您的帮助
猜你喜欢
  • 2022-06-11
  • 1970-01-01
  • 2019-03-18
  • 2020-04-17
  • 2021-10-29
  • 2022-01-07
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
相关资源
最近更新 更多