2013-10-30 3 views
17

TweetSharp (TweetSharp 버전 = 2.3.1 및 Newtonsoft.Json 버전 = 5.0.6) API를 사용하여 웹 응용 프로그램에서 사용자의 트윗을 표시합니다. 다음은 우리가 우리의 asp.net MVC에서 사용하는 코드는 (C#을) 응용 프로그램 :UserProfile과 TimeLine을 가져 오는 동안 Tweetsharp 문제가 발생했습니다.

var service = new TwitterService("ConsumerKey", "ConsumerKeySecret"); 
service.AuthenticateWith("TwitterToken", "TwitterTokenSecret"); 
TweetSharp.TwitterUser tuSelf = service.GetUserProfile(new GetUserProfileOptions() { IncludeEntities = false, SkipStatus = false }); 
if (tuSelf != null) 
{ 
//Get the User Details 
} 
var tweets = service.ListTweetsOnUserTimeline(new ListTweetsOnUserTimelineOptions { Count = 5 }); 

사용자 프로필 가져 오는 동안 우리는 다음과 같은 예외가 점점 : 가져 오는 동안

System.OverflowException: Value was either too large or too small for an Int32. 

Generated: Wed, 30 Oct 2013 05:48:41 GMT 

System.OverflowException: Value was either too large or too small for an Int32. 
    at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) 
    at Newtonsoft.Json.JsonTextReader.ParseNumber() 
    at Newtonsoft.Json.JsonTextReader.ParseValue() 
    at Newtonsoft.Json.JsonTextReader.ReadInternal() 
    at Newtonsoft.Json.JsonReader.ReadAsInt32Internal() 
    at Newtonsoft.Json.JsonTextReader.ReadAsInt32() 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType(JsonReader reader, JsonContract contract, Boolean hasConverter) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) 
    at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) 
    at TweetSharp.SerializerBase.DeserializeJson(String content, Type type) 
    at TweetSharp.JsonSerializer.DeserializeJson(String content, Type type) 
    at TweetSharp.JsonSerializer.DeserializeSingle(String content, Type type) 
    at TweetSharp.JsonSerializer.DeserializeContent(String content, Type type) 
    at TweetSharp.JsonSerializer.Deserialize[T](RestResponseBase response) 
    at Hammock.RestClient.DeserializeEntityBody[T](RestRequest request, RestResponse`1 response) 
    at Hammock.RestClient.BuildResponseFromResult[T](RestRequest request, WebQuery query) 
    at Hammock.RestClient.Request[T](RestRequest request) 
    at TweetSharp.TwitterService.WithHammockImpl[T](RestRequest request) 
    at TweetSharp.TwitterService.WithHammock[T](String path) 
    at TweetSharp.TwitterService.WithHammock[T](String path, Object[] segments) 
    at TweetSharp.TwitterService.GetUserProfile(GetUserProfileOptions options) 
    at TweetApp.Web.Controllers.TwitterController.GetFollowersAndTweets(TwitterSettings twitterSettings) 
    at TweetApp.Web.Controllers.TwitterController.ViewTwitter(Nullable`1 Id) 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<BeginInvokeActionMethodWithFilters>b__36(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<>c__DisplayClass2a.<BeginInvokeAction>b__20() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.<BeginInvokeAction>b__22(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) 
    at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__18(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) 
    at System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) 
    at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__3(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass4.<MakeVoidDelegate>b__3(IAsyncResult ar) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) 
    at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

그리고 아래 예외를 타임 라인 트윗 :

Newtonsoft.Json.JsonSerializationException: 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 '', line 1, position 1. 

Generated: Wed, 30 Oct 2013 04:45:03 GMT 

Newtonsoft.Json.JsonSerializationException: 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 '', line 1, position 1. 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureArrayContract(JsonReader reader, Type objectType, JsonContract contract) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) 
    at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) 
    at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) 
    at TweetSharp.SerializerBase.DeserializeJson(String content, Type type) 
    at TweetSharp.JsonSerializer.DeserializeJson(String content, Type type) 
    at TweetSharp.JsonSerializer.AddDeserializedItem(String c, Type type, IList collection) 
    at TweetSharp.JsonSerializer.DeserializeCollection(String content, Type type) 
    at TweetSharp.JsonSerializer.DeserializeContent(String content, Type type) 
    at TweetSharp.JsonSerializer.Deserialize[T](RestResponseBase response) 
    at Hammock.RestClient.DeserializeEntityBody[T](RestRequest request, RestResponse`1 response) 
    at Hammock.RestClient.BuildResponseFromResult[T](RestRequest request, WebQuery query) 
    at Hammock.RestClient.Request[T](RestRequest request) 
    at TweetSharp.TwitterService.WithHammockImpl[T](RestRequest request) 
    at TweetSharp.TwitterService.WithHammock[T](String path) 
    at TweetSharp.TwitterService.WithHammock[T](String path, Object[] segments) 
    at TweetSharp.TwitterService.ListTweetsOnUserTimeline(ListTweetsOnUserTimelineOptions options) 

모든 트위터 사용자에게는 해당되지 않습니다. 더 많은 트윗이있는 사용자에게만 발생합니다. 이 문제를 어떻게 처리 할 지 제안 해주십시오.

답변

17

저는 Twitter가 새 계정에 사용하는 새로운 사용자 ID 길이와 관련이있을 것이라고 확신합니다.

새 트위터 계정으로 작업 할 때마다 동일한 오류가 발생했습니다. 또한 새 계정에서 트윗이나 멘션이 있으면 이전 계정을 볼 때도 발생합니다.

Tweetsharp는 예외를 던지고있는 몇 군데에서 user_id에 정수를 사용하고 있습니다.

github으로 이동하여 최신 소스를 다운로드하십시오. 새 사용자 ID를 처리하도록 업데이트되었습니다.

+11

복제본 TweetSharp. TweetSharp.Core 프로젝트를 엽니 다. 설치 패키지 해먹이 없다면 해먹을 설치하십시오. Install-Package Newtonsoft.Json 당신이 그것을 가지고 있지 않다면. TweetSharp 프로젝트 만 구축하십시오. bin \ Debug \ TweetSharp.dll을 TweetSharp를 사용하는 프로젝트로 복사하십시오 (ref를 지우십시오, old를 지우십시오, new에서 복사하기, ref를 추가하여 안전함). 나는 새로운 테스트 트위터 계정으로 똑같은 문제를 겪었다.이 문제는 내 개인 계정으로는 해결되지 않았다. 건배 머리 위로 @Rob –

+0

누군가가 너겟을 업데이트해야합니다 –

+0

최신 코드베이스를 구축하는 데 문제가있는 경우 여기에서 DLL을 찾으십시오. https://github.com/mdrahman/TweetSharp.DLL –

12

트위터는 INT64에 INT32에서 자신의 ID를 변경하고 TweetSharp이 처리하도록 업데이트되지 않은 (당신은 그것을 직접 컴파일해야합니다).

는 해결하려면 다음 packages.config 파일에서

  1. 는 TweetSharp에 대한 참조를 삭제합니다.
  2. 열고 패키지 관리자 콘솔
  3. PM> 설치 - 패키지 TweetSharp - 비공식

그리고 붐. 그렇게해야합니다.

+1

두 제품의 차이점은 무엇입니까? 그것은 비공식적 인 말입니다. 그것을 사용하는 것이 안전합니까? –

+0

@RohitArora 비공식 버전은 'id'필드를 업데이트 한 원본 포크입니다. 나는 그것이 안전하다는 것을 보장 할 수는 없지만 그것을 사용하고있다. – Matt

+1

다행이 답변을 읽어 주셔서 감사합니다. – aw04

3

이 문제가 있습니다. JSON.Net 패키지와 그 고정 된 업데이트 만 있습니다.

솔루션으로 이동 Exp -> References right-> Manage Nuget pack -> 업데이트 확인 및 Json.net 팩 업데이트.