首页 > 编程知识 正文

unity破解pattern not found(Unity问题(3)ArgumentException: JSON must represent an object type.)

时间:2023-05-04 15:18:55 阅读:122228 作者:1611

报告错误的argument exception : jsonmustrepresentanobjecttype。

错误的截图

误译ArgumentException:JSON必须表示对象类型。

问题分析Step 1使用正确的json规范定位问题

判断对JsonUtility.FromJson()的理解不足是错误的原因。

我在Scripting API上找这个方法

比较代码时,我使用的JsonUtility.FromJson()返回List数组,方法签名指示返回的类型必须是对象。

发出我的“错误”. json文件

错误演示[ { 'panelType': 'ItemMessage ',' path ' : ' ui panel/itemmessagepanel ' }, { ' panel type ' 3360 ' kna nel ] ' path ' : ' ui panel/knapsack panel '、{ 'panelType': 'MainMenu '、' path ' 33660 } ShopPanel' }、{ 'panelType': 'Skill '、' path ' : ' ui panel/skill panel ' }、{ ' path ' 3360 ' ui panel/skill path ' 3360 } ' path ' : ' ui面板/系统面板' }、{ 'panelType': 'Task '、' path ' : ' ui面板/task panel }

3359 blog.csdn.net/Yanqing _ happy/article/details/98871448

在此提取要使用的部分

----JSON语法规则-----

数据位于名称/值对中

数据用逗号分隔

大括号保存对象

大括号保存数组

所以首先,必须将json语法修改为用大括号而不是数组保存的对象!

修改后的json代码如下

{ ' infolist ' : [ { ' paneltypestring ' : ' item message ',' path ' 3360 ' ui panel/itemmmessagepanel ' },{ ' pantant } ' path ' : ' ui面板/knapsack面板'、{ ' paneltypestring ' : ' main menu '、' path ' : ' ui面板/main menu面板{ 'panelTypeString': 'Skill '、' path ' : ' ui面板/skill面板' }、' path ' : ' ui面板/system面板' }

Step 2支持使用包类的JsonUtility序列化的List、Array和Dictionary的最佳方法是使用包类

[ system.serializable ] publicclassuipanelinfo { publicuipaneltypepaneltype; 公共字符串路径; publicstaticuipaneltypejsoncreatefromjson (stringjsonstring ) (returnjsonutility.fromjsonuipaneltypejson ) (JSON字符串) } publicclassuipaneltypejson//uipanelinfo的包装类具有[System.Serializable]特性{ public ListUIPanelInfo infoList; }如果您想了解更多关于序列化使用包装的信息,请查看本博客的文章

3359 blog.csdn.net/oyji 1992/article/details/74505230

至此,json文件和包类操作已完成。 可以在UIPanelTypeJson类中生成的实例上完美接收

JsonUtility.FromJson ()返回的对象类型。

step 3使用了iserialiazation界面,但还没结束呢!

注意:

其中UIPanelType是自定义枚举类型

UIPanelType.cs

using System.Collections; using system.collections.generic; 用户单元引擎; publicenumuipaneltype { item message,Knapsack,MainMenu,Shop,Skill,System,Task}此时运行unity将报告以下错误:

这个问题的错误报告的原因是我们自己定义的类型不能由Unity3D正确序列化。

Q:但是我们想让自己定义的类型序列化。 我该怎么办?

在A:中,可以考虑在序列化时将数据类型转换为可以在Unity3D中正确序列化的类型,然后在运行时通过反序列化将其转换为所需的类型。

这将使用ISerialiazationCallbackReceiver接口

类继承接口后,必须实现OnBeforeSerialize()方法和***OnAfterDeserialize () ***方法。

OnBeforeSerialize(): Unity3D在序列化对象之前调用方法。OnAfterDeserialize(): Unity3D在序列化后调用方法;

代码如下。

[ system.serializable ] publicclassuipanelinfo : iserializationcallbackreceiver { [ system.non serialized ] publicuipanelion 需要转换为UIPanelType类型的字段。 由于unity3D支持字符串类型的串行化公共字符串路径; publicstaticuipaneltypejsoncreatefromjson (stringjsonstring ) (returnjsonutility.fromjsonuipaneltypejson ) (JSON字符串) } public void OnAfterDeserialize () uipaneltypetype=(uipaneltype ) system.enum.parse(typeof ) uipaneltype ),paneltype panelType=type; } publicvoidonbeforeserialize (() publicclassuipaneltypejson//uipanelinfo包类包含“[System.Serializable]”特性) pupup 花了半天以上。

建议使用以下资源: 请对大家的学习有帮助。

bilibili :

33559 www.bilibili.com/video/av 1722636? p=2

3359 www.bilibili.com/video/av 33904479? p=23

如果有任何问题或建议,欢迎在评论区一起讨论。 ——刚进洞的鸡

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。