Unity3D中项目打包Android平台包运行过程中抛出异常:JSON integer is too large or small for an Int64
创始人
2025-05-29 03:53:02
0

Unity3D中项目打包Android平台包运行过程中抛出异常:JSON integer is too large or small for an Int64

  • 背景:
  • 一、遇到情况描述:
  • 二、导致的原因:
  • 三、解决方案:
    • 解决方案一:String手动解析
    • 解决方案二:更新Newtonsoft.Json的Dll库
  • 四、参考链接:

Unity3D中项目打包Android平台包运行过程中抛出异常:JSON integer is too large or small for an Int64

背景:

博主在打包的过程中,“屡次接收到”报错啦 ❗ ” “打包了没❗”“打好了没❗”,我可以很肯定地告诉你:在这里插入图片描述,作为一个打包仔而言,老老实实解决bug解决问题比较重要,在这里插入图片描述可能是项目中之前的数据没有达到这么大的一个阈值,当遇到这种情况后就确实有点头疼难解了。多处引用,改动风险比较大毕竟跟项目挂钩的比较紧密,时间也比较紧。然后在网上搜索相关的内容后,大概也是给了一个简单的思路,后续的内容还是已经解决的这个问题后才发现的,所以后续的思路仅供参考。替换dll是伴随风险的,除非一开始项目采用的就是新版的,否则一般不要这么去做。期间的改动,需要大家一起去评估对项目的影响和风险,采取最适合风险最低的方式去处理。大概就总结了一个这样的解决问题的思路文章。

一、遇到情况描述:

  • 项目代码中涉及到了采用微软下 Newtonsoft.Json.dll解析库,数据序列化与反序列化的过程

  • ❗❗❗Unity打包过程中不报错,手机调试运行过程中抛出异常;(这个比较坑,槽点在于如果你调试的过程中没有去try catch,unity下是无法捕获的)

  • 项目中序列化的过程中采用了下述这种方式:

  • JsonConvert.SerializeObject(data, settings);
    
  • 反序列化的过程中采用了下述这种解析方式:

  • JsonConvert.DeserializeObject(jsondata);
    
  • 在试图对Ulong类型的数据进行解析的过程中:抛出以下异常[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kKhPJtbR-1678966707209)(E:/LearnPath/[0006]Note/WizNote/images/image-20230316182452076.png)]


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)

二、导致的原因:

1、 👀**罪魁祸首 ** Newtonsoft.json.dll 版本较低(.net 3.5版本),类库文件本身不支持ulong类型的反序列化转换。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrDEThnm-1678966707209)(E:/LearnPath/[0006]Note/WizNote/images/image-20230316191215233.png)]

通过上述描述,我们其实也得知了,就是此处类型的bug,为了更加方便理解,翻译如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lq9MU6Ma-1678966707210)(E:/LearnPath/[0006]Note/WizNote/images/image-20230316191145547.png)]

❗❗❗所以综上所述,如果您在项目当中采用到了Newtonsoft.Json做转换,并且抛出了此类的异常,估计就是以上原因了,即采用了一个并不适配ulong类型或者更大的值的 dll库文件,既然遇到了此类问题,一定是有办法解决的,作者也贴心的在github中提到了解决方式,”简单且粗暴🐧“ ,即序列化成字符串后再自己进行转换。作者也表示后续讲修复这个问题(目前来说也的确修复了这个问题,亲测,但是至于序列化的过程有没有差异就不知道了在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ngiS02dt-1678966707210)(E:/LearnPath/[0006]Note/WizNote/images/image-20230316192049380.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3CVpK1zh-1678966707211)(E:/LearnPath/[0006]Note/WizNote/images/image-20230316191759938.png)]

三、解决方案:

解决方案一:String手动解析

将数据序列化成string后,对string进行划分并解析成对应的类结构即数据结构(亲测,已解决)

public static TestInfo1 ConvertByJsonData(List jsonData)
{TestInfo1 info = new TestInfo1(0, 0, 0, null);//假定TestInfo1中的类结构成员为(string,int,ulong,TestInfo)对应类型的变量;if (jsonData!=null && jsonData.Count > 0){for (var i = 0; i < jsonData.Count; i++){switch (jsonData[i]){case "key1":infoValue1 = jsonData[i+1];//将string解析成类结构成员变量,注意:记得匹配类型;假定infoValue1 为string类型break;case "key2":infoValue2= int.Parse(jsonData[i+1]);//将string解析成类结构成员变量,注意:记得匹配类型;假定infoValue2 为Int类型break;case "key3":infoValue3 = ulong.Parse(jsonData[i+1]);//将string解析成类结构成员变量,注意:记得匹配类型;假定infoValue3 为ulong类型break;case "key4":if (jsonData[i + 1] != "null"){//类结构中包含类结构,跟这个同样的结构去解析TestInfo2 testinfo2 = xxxxx.ConvertByJsonData(List jsonData)}break;}}}return info;
}

解决方案二:更新Newtonsoft.Json的Dll库

  • 更新dll库,照搬原方法,替换库文件即可(注意平台依赖关系,防止无用功打包)

  • 更新项目中引用所依赖的dll库,更新为已解决该问题的dll库即可。

    (未亲测,测过一个版本有问题,由于比较急,暂时还是采用的自己手动解析的方法做的处理)

  • 注意:相差版本过大,部分方法或许可能存在不适配;博主踩过坑…

四、参考链接:

以下贴上对应库下载地址以及作者的github链接地址,大家自行进行了解和学习;

一个简单好用的json 转换网址: https://codebeautify.org/string-to-json-online

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

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

在这里插入图片描述
如果您遇到了这个问题,并且我的文章确确实实帮到您了,希望您给一个赞支持一下我呀,喜欢我的文章的朋友也可以关注我的博客,关注我的后续的文章分享呀,谢谢啦。在这里插入图片描述

作者:ProMer_Wang

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

本文为ProMer_Wang的原创文章,著作权归作者所有,转载请注明原文出处,欢迎转载!

相关内容

热门资讯

爱的教育作文 爱的教育作文爱的教育看到这个书名,我不禁开始思考一个问题:在这个缤纷多彩的世界里,爱究竟是什么含义?...
梁衡《把栏杆拍遍》读书笔记 梁衡《把栏杆拍遍》读书笔记梁衡《把栏杆拍遍》读书笔记这是一篇写得很美的散文,有以下特点:一、联想丰富...
【每日一题Day150】LC1... 分割两个字符串得到回文串【LC1616】 给你两个字符串 a 和 b ,它们长度相同...
一年级春游日记 一年级春游日记一年级春游日记1  今天是春游,我作天就去买许多零食和矿泉水,打算在春游的时候干掉,我...
课外读书笔记摘抄 课外读书笔记摘抄(精选12篇)  导语:舍弃就是这样,它也许出于无奈,可在无奈之后是另一份希望,它也...
蚂蚁观察日记 【热门】蚂蚁观察日记4篇蚂蚁观察日记 篇1  我家有一个后院,我经常到后院去观察那些鹭绿上得小精灵—...
ImageView(图像视图) 本节介绍的UI基础控件是:ImageView(图像视图),就是用来显示图像的一个View或者说控件!...
关于接口测试——自动化框架的设... 一、自动化测试框架 在大部分测试人员眼中只要沾上“框架”,就感觉非常神秘,...
【2023.3.8】数据结构复... 【2023.3.8】数据结构复习笔记 文章目录【2023.3.8】数据结构复习笔记序言一、绪论二、线...
数学周记 【精华】数学周记范文(通用20篇)  不经意间,一个星期已经结束了,想必有很多难忘的瞬间吧,是时候仔...
男生贾里全传读书笔记 男生贾里全传读书笔记(通用24篇)  当品读完一部作品后,相信大家一定领会了不少东西,不能光会读哦,...
1.计算机网络和因特网 1.因特网的描述1.1 具体构成描述根据底层实现(硬件软件)端系统(主机...
使用YOLO部署哨岗相机 流程 一.模型选取 将YOLO和Faster RCNN进行搭配,通过多次实验ÿ...
大蒜观察日记 大蒜观察日记3篇  【导语】大蒜虽然是一种很不起眼的植物,但是它的生命力很强,无论在任何的环境下都可...
四年级观察植物的日记 四年级观察植物的日记范文  观察植物的日记需要怎么写呢?同学们是否有观察过植物的生长过程呢?不妨写下...
同一片天空共眠,同一个梦想奋斗... 同一片天空共眠,同一个梦想奋斗《大抠车始歌》(1) Eng...
Vue 3.0 Data选项 #概览 非兼容:data 组件选项声明不再接收纯 JavaScript object...
Java中原子操作的实现原理 Java中原子操作的实现原理1. 什么是原子操作2. 处理器如何是实现操作的原子性2.1 使用总线锁...
春节的街头小学日记 春节的街头小学日记  今天是大年初一,天气晴朗,妈妈带着我一早来到了兴宁路。  街上可热闹了,车水马...
通用实习日记 通用实习日记集合10篇通用实习日记 篇1  4 月18 日  今天是为期三周实习的第一天,心情有点紧...