【问题标题】:Cannot deserialize some tweets using NewtonSoft.Json无法使用 NewtonSoft.Json 反序列化某些推文
【发布时间】:2012-02-03 08:19:32
【问题描述】:

大家好,

我正在运行一个使用 Twitter Stream API 的 C# 控制台应用程序。我的代码在下面

 JToken json = JObject.Parse(ResponseStream.ReadLine());

对于每 +- 20 条推文,我会收到以下错误“从 JsonReader 读取 JObject 时出错”。

我将 json 复制到 JSONLint 并且它是有效的,所以我很困惑为什么这种情况不断发生。其他人有这个错误吗?

【问题讨论】:

    标签: c#-4.0 twitter console-application json.net jsonlint


    【解决方案1】:

    是的,最近才开始发生。我相信这要么是 NewtonSoft.Json 的错误,要么是 twitter api 的更改导致它发送错误的 json。我做了一个数据包捕获并通过计算它们找到了违规字符,但我没有发现任何错误。我想我们只需要等待这个错误被修复。

    更新 我将 Newtonsoft.Json.dll 降级为 4.3.*,它工作正常。

    【讨论】:

      【解决方案2】:

      我发现了问题。有时流返回一个空字符串。因此解析空字符串会引发错误。下面是我如何保护它的示例:

      public static void ProccessTweet(object objMessage)
          {
              if(objMessage.ToString() != "")
              {
                  var json = JObject.Parse(objMessage.ToString());
                  if (json["retweeted_status"] == null)
                  {
                      var message = ProcessNewTweet(json);
                      Db.Votes.Add(new FNBVote
                      {
                          Message = message,
                          Entry = Db.Entries.Find(message.Entry.EntryId)
                      });
      
                      return;
                  }
      
                  ProcessRetweet(json);
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多