国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64

這篇具有很好參考價(jià)值的文章主要介紹了Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64

背景:

博主在打包的過(guò)程中,“屢次接收到”報(bào)錯(cuò)啦 ? ” “打包了沒(méi)?”“打好了沒(méi)?”,我可以很肯定地告訴你:Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64,作為一個(gè)打包仔而言,老老實(shí)實(shí)解決bug解決問(wèn)題比較重要,Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64可能是項(xiàng)目中之前的數(shù)據(jù)沒(méi)有達(dá)到這么大的一個(gè)閾值,當(dāng)遇到這種情況后就確實(shí)有點(diǎn)頭疼難解了。多處引用,改動(dòng)風(fēng)險(xiǎn)比較大畢竟跟項(xiàng)目掛鉤的比較緊密,時(shí)間也比較緊。然后在網(wǎng)上搜索相關(guān)的內(nèi)容后,大概也是給了一個(gè)簡(jiǎn)單的思路,后續(xù)的內(nèi)容還是已經(jīng)解決的這個(gè)問(wèn)題后才發(fā)現(xiàn)的,所以后續(xù)的思路僅供參考。替換dll是伴隨風(fēng)險(xiǎn)的,除非一開(kāi)始項(xiàng)目采用的就是新版的,否則一般不要這么去做。期間的改動(dòng),需要大家一起去評(píng)估對(duì)項(xiàng)目的影響和風(fēng)險(xiǎn),采取最適合風(fēng)險(xiǎn)最低的方式去處理。大概就總結(jié)了一個(gè)這樣的解決問(wèn)題的思路文章。

一、遇到情況描述:

  • 項(xiàng)目代碼中涉及到了采用微軟下 Newtonsoft.Json.dll解析庫(kù),數(shù)據(jù)序列化與反序列化的過(guò)程

  • ???Unity打包過(guò)程中不報(bào)錯(cuò),手機(jī)調(diào)試運(yùn)行過(guò)程中拋出異常;(這個(gè)比較坑,槽點(diǎn)在于如果你調(diào)試的過(guò)程中沒(méi)有去try catch,unity下是無(wú)法捕獲的)

  • 項(xiàng)目中序列化的過(guò)程中采用了下述這種方式:

  • JsonConvert.SerializeObject(data, settings);
    
  • 反序列化的過(guò)程中采用了下述這種解析方式:

  • JsonConvert.DeserializeObject<xxxProtoInfo>(jsondata);
    
  • 在試圖對(duì)Ulong類(lèi)型的數(shù)據(jù)進(jìn)行解析的過(guò)程中:拋出以下異常Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64


Newtonsoft.Json.JsonReaderException : JSON integer 9111111111111111117 is too large or small for an Int64. Path ‘xxxparm’, line 1, position 58.
at Newtonsoft.Json.JsonTextReader.ParseNumber (Newtonsoft.Json.ReadType readType)
at Newtonsoft.Json.JsonTextReader.ParseValue ()
at Newtonsoft.Json.JsonTextReader.Read ()
at Newtonsoft.Json.JsonReader.ReadAndMoveToContent ()
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.ReadForType (Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.Serialization.JsonContract contract, System.Boolean hasConverter)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject (System.Object newObject, Newtonsoft.Json.JsonReader reader, Newtonsoft.Json.Serialization.JsonObjectContract contract, Newtonsoft.Json.Serialization.JsonProperty member, System.String id)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType, Newtonsoft.Json.Serialization.JsonContract contract, Newtonsoft.Json.Serialization.JsonProperty member, Newtonsoft.Json.Serialization.JsonContainerContract containerContract, Newtonsoft.Json.Serialization.JsonProperty containerMember, System.Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType, System.Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00053] in
at Newtonsoft.Json.JsonSerializer.Deserialize (Newtonsoft.Json.JsonReader reader, System.Type objectType) [0x00000] in
at Newtonsoft.Json.JsonConvert.DeserializeObject (System.String value, System.Type type, Newtonsoft.Json.JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T] (System.String value, Newtonsoft.Json.JsonSerializerSettings settings) [0x00000] in
at Newtonsoft.Json.JsonConvert.DeserializeObject[T] (System.String value)

二、導(dǎo)致的原因:

1、 ??**罪魁禍?zhǔn)?** Newtonsoft.json.dll 版本較低(.net 3.5版本),類(lèi)庫(kù)文件本身不支持ulong類(lèi)型的反序列化轉(zhuǎn)換。

Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64

通過(guò)上述描述,我們其實(shí)也得知了,就是此處類(lèi)型的bug,為了更加方便理解,翻譯如下:

Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64

???所以綜上所述,如果您在項(xiàng)目當(dāng)中采用到了Newtonsoft.Json做轉(zhuǎn)換,并且拋出了此類(lèi)的異常,估計(jì)就是以上原因了,即采用了一個(gè)并不適配ulong類(lèi)型或者更大的值的 dll庫(kù)文件,既然遇到了此類(lèi)問(wèn)題,一定是有辦法解決的,作者也貼心的在github中提到了解決方式,”簡(jiǎn)單且粗暴??“ ,即序列化成字符串后再自己進(jìn)行轉(zhuǎn)換。作者也表示后續(xù)講修復(fù)這個(gè)問(wèn)題(目前來(lái)說(shuō)也的確修復(fù)了這個(gè)問(wèn)題,親測(cè),但是至于序列化的過(guò)程有沒(méi)有差異就不知道了Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64

Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64

Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64

三、解決方案:

解決方案一:String手動(dòng)解析

將數(shù)據(jù)序列化成string后,對(duì)string進(jìn)行劃分并解析成對(duì)應(yīng)的類(lèi)結(jié)構(gòu)即數(shù)據(jù)結(jié)構(gòu)(已解決,代碼有優(yōu)化空間)

public static TestInfo1 ConvertByJsonData(List<string> jsonData)
{
    TestInfo1 info = new TestInfo1(0, 0, 0, null);//假定TestInfo1中的類(lèi)結(jié)構(gòu)成員為(string,int,ulong,TestInfo)對(duì)應(yīng)類(lèi)型的變量;
    if (jsonData!=null && jsonData.Count > 0)
    {
        for (var i = 0; i < jsonData.Count; i++)
        {
            switch (jsonData[i])
            {
                case "key1":
                   infoValue1 = jsonData[i+1];//將string解析成類(lèi)結(jié)構(gòu)成員變量,注意:記得匹配類(lèi)型;假定infoValue1 為string類(lèi)型
                    break;
                case "key2":
                    infoValue2= int.Parse(jsonData[i+1]);//將string解析成類(lèi)結(jié)構(gòu)成員變量,注意:記得匹配類(lèi)型;假定infoValue2 為Int類(lèi)型
                    break;
                case "key3":
                    infoValue3 = ulong.Parse(jsonData[i+1]);//將string解析成類(lèi)結(jié)構(gòu)成員變量,注意:記得匹配類(lèi)型;假定infoValue3 為ulong類(lèi)型
                    break;
                case "key4":
                    if (jsonData[i + 1] != "null")
                    {
                    	//類(lèi)結(jié)構(gòu)中包含類(lèi)結(jié)構(gòu),跟這個(gè)同樣的結(jié)構(gòu)去解析
                        TestInfo2 testinfo2 = xxxxx.ConvertByJsonData(List<string> jsonData)
                    }
                    break;
            }
        }
    }
    
    return info;
}

解決方案二:更新Newtonsoft.Json的Dll庫(kù)

  • 更新dll庫(kù),照搬原方法,替換庫(kù)文件即可(注意平臺(tái)依賴關(guān)系,防止無(wú)用功打包)

  • 更新項(xiàng)目中引用所依賴的dll庫(kù),更新為已解決該問(wèn)題的dll庫(kù)即可。

    (未親測(cè),測(cè)過(guò)一個(gè)版本有問(wèn)題,由于比較急,暫時(shí)還是采用的自己手動(dòng)解析的方法做的處理)

  • 注意:相差版本過(guò)大,部分方法或許可能存在不適配;博主踩過(guò)坑…

四、參考鏈接:

以下貼上對(duì)應(yīng)庫(kù)下載地址以及作者的github鏈接地址,大家自行進(jìn)行了解和學(xué)習(xí);

一個(gè)簡(jiǎn)單好用的json 轉(zhuǎn)換網(wǎng)址: https://codebeautify.org/string-to-json-online

Json.Net 下載地址: https://www.newtonsoft.com/json

Json.Net 源碼地址:https://github.com/JamesNK/Newtonsoft.Json

Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64
如果您遇到了這個(gè)問(wèn)題,并且我的文章確確實(shí)實(shí)幫到您了,希望您給一個(gè)贊支持一下我呀,喜歡我的文章的朋友也可以關(guān)注我的博客,關(guān)注我的后續(xù)的文章分享呀,謝謝啦。Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64

公眾號(hào):平平無(wú)奇代碼猴
也可以搜索:Jackiie_wang 公眾號(hào),歡迎大家關(guān)注!歡迎催更!留言!

作者:ProMer_Wang

鏈接:https://blog.csdn.net/qq_43801020/article/details/129596819

本文為ProMer_Wang的原創(chuàng)文章,著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)注明原文出處,歡迎轉(zhuǎn)載!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-491990.html

到了這里,關(guān)于Unity3D中項(xiàng)目打包Android平臺(tái)包運(yùn)行過(guò)程中拋出異常:JSON integer is too large or small for an Int64的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Unity3D】Android 打包 ② ( Android 編譯選項(xiàng) | Android 工程設(shè)置 | 配置基本信息 | 配置不同分辨率圖標(biāo) | 配置啟動(dòng)動(dòng)畫(huà) | 其它設(shè)置 )

    【Unity3D】Android 打包 ② ( Android 編譯選項(xiàng) | Android 工程設(shè)置 | 配置基本信息 | 配置不同分辨率圖標(biāo) | 配置啟動(dòng)動(dòng)畫(huà) | 其它設(shè)置 )

    在上一篇博客 【Unity3D】Android 打包 ① ( Android 編譯選項(xiàng) | 安裝 Android Build Support 模塊 ) 中 講解了 Android 打包的最基本配置 , 安裝 Android Build Support 模塊 ; 本篇博客繼續(xù)講解后續(xù)工作 ; 在 Unity 編輯器中選擇 \\\" 菜單欄 | File | Build Settings \\\" 選項(xiàng) , 點(diǎn)擊 Build Settings 對(duì)話框的左下角的

    2023年04月19日
    瀏覽(99)
  • Unity打包錯(cuò)誤:無(wú)法成功進(jìn)行Unity3D應(yīng)用程序打包

    在Unity開(kāi)發(fā)過(guò)程中,有時(shí)候會(huì)遇到各種各樣的錯(cuò)誤。其中一個(gè)常見(jiàn)的問(wèn)題是無(wú)法成功進(jìn)行Unity3D應(yīng)用程序的打包。本文將探討可能導(dǎo)致此錯(cuò)誤的幾種常見(jiàn)情況,并提供相應(yīng)的解決方案。 資源文件丟失或路徑錯(cuò)誤: 打包應(yīng)用程序時(shí),確保所有所需的資源文件都存在,并且路徑設(shè)

    2024年01月16日
    瀏覽(25)
  • Unity3D打包Assetbundle丟失Shader問(wèn)題

    Unity3D打包Assetbundle丟失Shader問(wèn)題

    詳情見(jiàn):https://www.pianshen.com/article/5391338163/ 1、Unity3D在打包Assetbundle時(shí),可能會(huì)遇到Shader丟失的問(wèn)題,解決方法:打開(kāi) Edit-Project Settings-Graphics,在Always Included Shaders列表添加上所需的shader ,再打包即可。 2、參考 3、原文復(fù)制 Scriptable RenderLoop settings This is an experimental setting wh

    2023年04月22日
    瀏覽(97)
  • 如何將Unity3D中的腳本打包成為DLL類(lèi)庫(kù)?

    如何將Unity3D中的腳本打包成為DLL類(lèi)庫(kù)?

    如果我們想把代碼打成DLL,首先需要有一個(gè)Assembly和一個(gè)合理的代碼目錄結(jié)構(gòu)規(guī)劃。 1.將要?dú)w為一類(lèi)的腳本放進(jìn)同一個(gè)文件內(nèi),在該文件夾下右鍵創(chuàng)建一個(gè)Assembly Definition,默認(rèn)它會(huì)將同文件夾以及子目錄內(nèi)的腳本歸為一個(gè)Assembly。 2.在Editor下創(chuàng)建一個(gè)CompileDll腳本來(lái)將我們的腳

    2024年02月12日
    瀏覽(28)
  • Unity3D:2D/3D 項(xiàng)目

    Unity3D:2D/3D 項(xiàng)目

    推薦:將 NSDT場(chǎng)景編輯器 加入你的3D工具鏈 3D工具集: NSDT簡(jiǎn)石數(shù)字孿生 無(wú)論是創(chuàng)建 2D 還是 3D 游戲,Unity 都很拿手。在 Unity 中創(chuàng)建新項(xiàng)目時(shí),可以選擇以 2D 或 3D 模式啟動(dòng)。您可能已經(jīng)知道要構(gòu)建什么,但有一些細(xì)微的要點(diǎn)可能會(huì)影響選擇的模式。 選擇是以 2D 還是 3D 模式啟

    2024年02月07日
    瀏覽(30)
  • 【虛擬仿真】Unity3D打包WEBGL后播放視頻(VideoPlayer組件)

    【虛擬仿真】Unity3D打包WEBGL后播放視頻(VideoPlayer組件)

    推薦閱讀 CSDN主頁(yè) GitHub開(kāi)源地址 Unity3D插件分享 簡(jiǎn)書(shū)地址 我的個(gè)人博客 大家好,我是佛系工程師 ☆恬靜的小魔龍☆ ,不定時(shí)更新Unity開(kāi)發(fā)技巧,覺(jué)得有用記得一鍵三連哦。 本篇文章實(shí)現(xiàn)Unity3D打包WEBGL后播放視頻,如下圖所示: 使用了VideoPlayer組件,代碼比較簡(jiǎn)單。 主要就

    2023年04月25日
    瀏覽(39)
  • Unity3D中打包WEBGL后讀取本地文件數(shù)據(jù)+網(wǎng)絡(luò)請(qǐng)求

    Unity3D中打包WEBGL后讀取本地文件數(shù)據(jù)+網(wǎng)絡(luò)請(qǐng)求

    首先上一編博主運(yùn)行html之后報(bào)的錯(cuò)誤:提示內(nèi)存不足?。。?! 1.首先排查一下webgl包的大小,不能超過(guò)2G。 2.F12查看具體錯(cuò)誤,在這里博主的是: ? ? ? ?a:本地讀取StreamingAssets里的配置文件,序列化失敗。 ? ? ? ?b:網(wǎng)絡(luò)請(qǐng)求方法不能使用JsonConvert.SerializeObject將對(duì)象重新序列

    2024年02月08日
    瀏覽(30)
  • 【Unity3D】Unity與Android交互

    【Unity3D】Unity與Android交互

    ? ? ? ? 本文主要介紹 Unity 打包發(fā)布 Android apk 流程、基于?AndroidJavaObject(或?AndroidJavaClass)實(shí)現(xiàn) Unity 調(diào)用 Java 代碼、基于 UnityPlayer 實(shí)現(xiàn) Java 調(diào)用 Unity 代碼,官方介紹見(jiàn)→Android。 ? ? ? ? Unity 項(xiàng)目 C#?中獲取平臺(tái)的代碼如下,需要引入 UnityEngine 命名空間。 ????????Ru

    2024年02月07日
    瀏覽(16)
  • 解決Unity3D打包到PC端,UGUI的格式錯(cuò)亂問(wèn)題

    解決Unity3D打包到PC端,UGUI的格式錯(cuò)亂問(wèn)題

    Tips:在UI界面開(kāi)始設(shè)計(jì)之前,一定先要設(shè)置好各項(xiàng)UI元素的參照位置,以及參考的屏幕分辨率比例,不然你精心設(shè)計(jì)好的UI界面在別人電腦上一看,直接堆在了一起或者根本顯示不全,后面再改會(huì)很麻煩。 前言:本文主要分兩部分,主講第一部分。并不是第二部分不重要,而

    2024年02月07日
    瀏覽(33)
  • 一次Unity3D IL2CPP 打包錯(cuò)誤

    一次Unity3D IL2CPP 打包錯(cuò)誤

    目錄 一、錯(cuò)誤描述 二、問(wèn)題分析 三、解決方法 四、效果驗(yàn)證 五、后記 采用IL2CPP生成的時(shí)候,出現(xiàn)了4個(gè)錯(cuò)誤: (1)Building LibraryBeeartifactsWinPlayerBuildProgramei6vjku08_i_vm6.lump.obj failed with output: (2)BuildFailedException: Incremental Player build failed! (3)Build completed with a result of ‘

    2024年02月03日
    瀏覽(34)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包