簡體   English   中英

Twitterizer引發異常:反序列化對象時發生意外的令牌:整數

[英]Twitterizer throwing an exception: Unexpected token when deserializing object: Integer

使用TwitterizerLookUp方法時,我遇到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.PerformAction 1.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM