![](/img/trans.png)
[英]Twitterizer2 1.2.4 Streaming API exception - Unexpected end when deserializing object
[英]Twitterizer throwing an exception: Unexpected token when deserializing object: Integer
使用Twitterizer的LookUp
方法時,我遇到JSON(反序列化)異常。 異常指出:
反序列化對象時出現意外令牌:整數
我的代碼大致如下所示:
// Populates the lookup options, requests the user details and processes the results
private void LookUpFollowersWithoutDetail(List<Follower> followersWithoutDetail)
{
LookupUsersOptions lookupOptions = new LookupUsersOptions();
for (int index = 0; index < followersWithoutDetail.Count && index < 100; index++)
{
lookupOptions.UserIds.Add(followersWithoutDetail[index].UserId);
}
RequestResult result = GetUserDetails(lookupOptions);
// process the results
}
獲取用戶詳細信息的方法如下所示:
// Performs the lookup and saves the users to the database
private RequestResult GetUserDetails(LookupUsersOptions lookupOptions)
{
try
{
// Look up the followers
TwitterResponse<TwitterUserCollection> userLookupResponse =
TwitterUser.Lookup(_tokens, lookupOptions); // <-- Throws Exception
if (userLookupResponse.Result == RequestResult.Success)
{
SaveUserDetails(userLookupResponse);
}
return userLookupResponse.Result;
}
catch (Exception e)
{
Console.WriteLine("Exception in GetUserDetails: " + e.Message);
}
return RequestResult.Unknown;
}
我沒有做任何花哨的事情,我只是在查詢選項中放了一堆整數(跟隨者的用戶ID),然后使用這些選項調用查詢方法。 在大多數情況下,該方法都能正常工作,但偶爾我會收到本文開頭提到的異常。 有人在Twitterizer上遇到過類似的問題嗎,他們找到了解決方案嗎?
更新(針對Ricky):
這是堆棧跟蹤:
在Newton的Newton.Json.Serialization.JsonSerializerInternalReader.CreateAndPopulateObject(JsonReader的讀者,JsonObjectContractS。合同,字符串id。)在Newton的Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject,JsonReader reader,JsonObjectContract contract,String id)。 JsonSerializerInternalReader.CreateObject(JsonReader reader,Type objectType,JsonContract contract,JsonProperty member,Object existValue)在Newton.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader,Type objectType,JsonContract contract,JsonProperty成員Newton。在Newton的序列化。 Newton.Json.Serialization.JsonSerializerInternalReader.CreateAndPopulateObject(JsonReader讀者,JsonObjectContracter合同,字符串id)在Newtonsoft.JsonSizer。 (Newsonsoft.Json.Serialization.Internal(JsonReader reader,Type objectType,JsonContract contract,JsonProperty member,Object existValue)在Newton.Json.Serialization.JsonSerializer。 Newton.Json.Serialization的.CreateValueProperty(JsonReader閱讀器,JsonProperty屬性,對象目標,布爾型gettenCurrentValue,Object currentValue)在Newton.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty屬性,JsonReader閱讀器,對象目標) Newton.JsonSerializer.JsonSerializer(JsonSerializer.Object.Create.JsonSerializerInternalReader.PopulateObject(Object newObject,JsonReader reader,JsonObjectContract contract,String id)在牛頓軟件公司。 ,位於Newton.Json.Serialization.JsonSertyizer(JsonSerializerIn(JsonSerializerIn( Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IWrappedCollection包裝的List,JsonReader閱讀器,字符串引用,JsonArrayContract合同)的Newtonsoft.Json.Serialization.JsonSerializerInternalR的JsonReader閱讀器,類型objectType,JsonContract合同) eader。<> c_ DisplayClass1.b _0(IList l,布爾值isTemporaryListReference)在Newton.Json.Utilities.CollectionUtils.CreateAndPopulateList(Type listType,Action
2 populateList) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateAndPopulateList(JsonReader reader, String reference, JsonArrayContract contract) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String reference) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueNonProperty(JsonReader reader, Type objectType, JsonContract contract) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings) at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value) at Twitterizer.Core.SerializationHelper
2 populateList) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateAndPopulateList(JsonReader reader, String reference, JsonArrayContract contract) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String reference) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueNonProperty(JsonReader reader, Type objectType, JsonContract contract) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings) at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value) at Twitterizer.Core.SerializationHelper
Twitterizer.Core.SerializationHelper 1.Deserialize(Byte [] webResponseData,DeserializationHandler deserializationHandler)1.ExecuteCommand() at Twitterizer.Core.CommandPerformer.PerformAction[T](ICommand
位於C:\\ Users \\中的OBFUSCATED.System.OBFUSCATED.GetUserDetails(LookupUsersOptions lookupOptions)的Twitterizer.TwitterUser.Lookup(OAuthTokens令牌,LookupUsersOptions選項)的Twitterizer.Core.CommandPerformer.PerformAction1.ExecuteCommand() at Twitterizer.Core.CommandPerformer.PerformAction[T](ICommand
1命令)的1.ExecuteCommand() at Twitterizer.Core.CommandPerformer.PerformAction[T](ICommand
user \\ Path \\ To \\ MyClass.cs:第306行
這是發生此異常時提供的用戶ID的列表:
- lookupOptions.UserIds Count = 100 Twitterizer.TwitterIdCollection
[0] 39026441 decimal
[1] 360825202 decimal
[2] 377779483 decimal
[3] 77599652 decimal
[4] 199504556 decimal
[5] 15290529 decimal
[6] 15293368 decimal
[7] 15295132 decimal
[8] 15295838 decimal
[9] 15300610 decimal
[10] 15307479 decimal
[11] 15314695 decimal
[12] 15315646 decimal
[13] 15316087 decimal
[14] 15322893 decimal
[15] 15324552 decimal
[16] 15325815 decimal
[17] 15330982 decimal
[18] 15332031 decimal
[19] 15332318 decimal
[20] 15336542 decimal
[21] 15338843 decimal
[22] 15340130 decimal
[23] 15341396 decimal
[24] 15341681 decimal
[25] 15342905 decimal
[26] 15343278 decimal
[27] 15351598 decimal
[28] 15358123 decimal
[29] 15361196 decimal
[30] 15361723 decimal
[31] 15363684 decimal
[32] 15365834 decimal
[33] 15366588 decimal
[34] 15375866 decimal
[35] 15377256 decimal
[36] 15384679 decimal
[37] 15384994 decimal
[38] 15388036 decimal
[39] 15388874 decimal
[40] 15390556 decimal
[41] 15397486 decimal
[42] 15398320 decimal
[43] 15401318 decimal
[44] 15421131 decimal
[45] 15421937 decimal
[46] 15422192 decimal
[47] 15433173 decimal
[48] 15433807 decimal
[49] 15435566 decimal
[50] 15447574 decimal
[51] 15448831 decimal
[52] 15449755 decimal
[53] 15450751 decimal
[54] 15452924 decimal
[55] 15456465 decimal
[56] 15456590 decimal
[57] 15458653 decimal
[58] 15458901 decimal
[59] 15461998 decimal
[60] 15465107 decimal
[61] 15467755 decimal
[62] 15468099 decimal
[63] 15470126 decimal
[64] 15475251 decimal
[65] 15475461 decimal
[66] 15478303 decimal
[67] 15479254 decimal
[68] 15479572 decimal
[69] 15479736 decimal
[70] 15484821 decimal
[71] 15487227 decimal
[72] 15487287 decimal
[73] 15489577 decimal
[74] 15490132 decimal
[75] 15501961 decimal
[76] 15503943 decimal
[77] 15505543 decimal
[78] 15510316 decimal
[79] 15515724 decimal
[80] 15523378 decimal
[81] 15526558 decimal
[82] 15529204 decimal
[83] 15538443 decimal
[84] 15554417 decimal
[85] 15564955 decimal
[86] 15569189 decimal
[87] 15575242 decimal
[88] 15575635 decimal
[89] 15578111 decimal
[90] 15580710 decimal
[91] 15585660 decimal
[92] 15589332 decimal
[93] 15594166 decimal
[94] 15597341 decimal
[95] 15603662 decimal
[96] 15608792 decimal
[97] 15618128 decimal
[98] 15620785 decimal
[99] 15620915 decimal
+ Raw View
研究了這一點之后,我確定Twitter並沒有進行任何更改。 這似乎是一個實時漏洞,與解析地理位置數據有關。
JSON.NET(Twitterizer用於反序列化JSON數據的庫)讀取的坐標值很長,但Twitterizer將其轉換為雙精度值。
兩行代碼之后,該錯誤已修復。
如果您想自己應用補丁,則此修復程序位於Twitterizer2 \\ Methods \\ Geo \\ Coordinate.cs中。
第119行變成:
result[itemIndex].Latitude = Convert.ToDouble(reader.Value);
第123行變成:
result[itemIndex].Longitude = Convert.ToDouble(reader.Value);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.