当前位置: 首页 > news >正文

【Unity实战】SO反序列化正确姿势

此篇博文算是【C#实战】Newtonsoft.Json基类子类解析_newtonsoft.json不能转化子类-CSDN博客的一个补充,因为我发现ScriptableObject并不是传统的new()就能解决的问题。

SomeClass must be instantiated using the ScriptableObject.CreateInstance method instead of new SomeClass.

很明显,Unity不推荐使用new来弄一个实例。

前后对比如下:

// Before
private T GetItem<T>(JObject obj)
{return obj.ToObject<T>();
}// After
private Item GetItem(JObject obj)
{Item item = ScriptableObject.CreateInstance<Item>();JsonUtility.FromJsonOverwrite(obj.ToString(), item);return item;
}

这里使用了JsonUtility,这是Unity自带的Json序列化、反序列化库,对SO有特殊的处理。如果之前用的是Newtonsoft,可以写个自定义的JsonConverter,然后用JsonUtility去覆盖新建出来的SO实例。

有同志问为什么不用之前的泛型而是指定具体的类型,主要是CreateInstance不能和泛型使用,编译不会通过,看似没有泛型相关的实现。

So emm,如果读者有泛型的实现方法,欢迎评论区留言,感激不尽。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 每天五分钟深度学习PyTorch:不同的神经网络层设置不同的学习率
  • 三、Kubernetes中的控制器的使用
  • 响应式CSS 媒体查询——WEB开发系列39
  • 安卓framework美化手势导航侧滑返回UI
  • 使用CUBE_MX实现STM32 DMA 功能(存储器到存储器)
  • 打开VSCod安装“PHP Intelephense”或“PHP Server”PHP扩展
  • 通过SQL语句判断奇偶数的几种方法
  • QXml 使用方法
  • 物联网之ESP32与微信小程序实现指示灯、转向灯
  • FloodFill算法(DFS+BFS)【上】
  • NLP基础及其代码-tokenizer
  • 如何保证消息不重复消费
  • 【Power Compiler手册】13.UPF多电压设计实现(3)
  • Vant 按需引入导致 Typescript,eslint 报错问题
  • 【专题】2024跨境出海供应链洞察-更先进供应链报告合集PDF分享(附原数据表)
  • 深入了解以太坊
  • hexo+github搭建个人博客
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • JavaScript 一些 DOM 的知识点
  • javascript面向对象之创建对象
  • java多线程
  • maven工程打包jar以及java jar命令的classpath使用
  • mysql常用命令汇总
  • overflow: hidden IE7无效
  • PAT A1050
  • SwizzleMethod 黑魔法
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 微信小程序实战练习(仿五洲到家微信版)
  • 我的面试准备过程--容器(更新中)
  • 一、python与pycharm的安装
  • HanLP分词命名实体提取详解
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​【已解决】npm install​卡主不动的情况
  • ###STL(标准模板库)
  • #Spring-boot高级
  • #vue3 实现前端下载excel文件模板功能
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • $.proxy和$.extend
  • $L^p$ 调和函数恒为零
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (七)Java对象在Hibernate持久化层的状态
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (十三)MipMap
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)详解PHP处理密码的几种方式
  • ***检测工具之RKHunter AIDE
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .gitignore文件使用
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版