0

私は TweetSharp を使用してツイートを取得しています。これは、Newtonsoft の JSON.NET を使用しています。これは非常にシンプルなアプリ コードです。

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

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

私を悩ませているツイートが1つあります。そして、私が取得している例外は、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 から最新のソースをダウンロードしましたが、役に立たないようです。もう 1 つ、問題のツイートは [{"created_at": "Sun Nov 03 21:44:51 +0000 2013" で始まりますが、{"created_at": "Sun Nov 03 21:44:51 +0000 2013] "、余分な角かっこがあります。

4

1 に答える 1

2

OK、調査の結果、アプリケーションのデバッグ中に TweetSharp のソース コードを掘り下げることができました。

私の場合、JSON Deserializer が例外をスローしている理由は、一部のユーザーがツイートで笑顔や悲しい顔などの絵文字コンスをつぶやいたためです。これらの絵文字コンスは、JSON に渡す前にエンコードされていないため、JSON Deserailizer を壊しています。

仕事で別のライブラリに切り替える過程にあるため、Tweetsharp コードに変更を加える時間がありませんでした。コンテンツ チームは、絵文字の短所を不適切にエンコードしたツイートを削除しました。それは迅速で汚い修正でした

于 2013-11-08T15:49:53.407 に答える