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

server/2024/9/22 19:42:20/

此篇博文算是【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,如果读者有泛型的实现方法,欢迎评论区留言,感激不尽。


http://www.ppmy.cn/server/120422.html

相关文章

C++类和对象(下)

文章目录 const成员函数取地址运算符重载初始化列表类型转换static成员友元内部类匿名对象 const成员函数 概念&#xff1a;将const修饰的成员函数称之为const成员函数 定义&#xff1a;const修饰成员函数时&#xff0c;放到成员函数参数列表的后面 例&#xff1a; class Date…

Selenium等待机制:理解并应用显式等待与隐式等待,解决页面加载慢的问题

目录 引言 等待机制的重要性 显式等待&#xff08;Explicit Wait&#xff09; 原理 应用方式 代码示例 优点与缺点 隐式等待&#xff08;Implicit Wait&#xff09; 原理 应用方式 代码示例 优点与缺点 解决页面加载慢的问题 1. 合理设置等待时间 2. 优先使用显…

【JavaEE初阶】多线程6(线程池\定时器)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 实例3:线程池 参数解释 核心线程数, 最大线程数 允许空闲的最大时间 ,时间单位 任务队列(阻塞队列) 线程工厂>工厂设计模式 拒绝策略 使用举例 模拟实现一个线…

如何在Linux Centos7系统中挂载群晖共享文件夹

前景&#xff1a;企业信息化各种系统需要上传很多的图片或者是文件&#xff0c;文件如何在群晖中显示&#xff0c;当文件或者图片上传到linux指定文件夹内&#xff0c;而文件夹又与群晖共享文件夹进行挂载&#xff0c;就能保证上传的文件或者图片出现在群晖并在群晖里进行管理。…

Mac 上,终端如何开启 proxy

文章目录 为什么要这么做前提步骤查看 port查看代理的port配置 bash测试 为什么要这么做 mac 上的终端比较孤僻吧&#xff0c;虽然开了&#xff0c;但是终端并不走&#x1fa9c;…产生的现象就是&#xff0c;浏览器可以访问&#x1f30d;&#xff0c;但是终端不可以访问&#…

深入理解与避免Java 死锁

在 Java 编程中&#xff0c;死锁是一个让人头疼但又至关重要的问题。理解死锁的产生条件以及如何避免死锁&#xff0c;对于编写高效、稳定的多线程程序至关重要。本文将深入探讨 Java 死锁的四个必要条件&#xff0c;并通过具体的例子和解决方案帮助读者更好地理解和避免死锁。…

集群聊天服务器项目【C++】(六)MySql数据库

前面已经介绍了网络模块和业务模块&#xff0c;本章介绍数据模块&#xff0c;同样保持模块解耦的特性&#xff0c;即业务模块不能出现数据模块内容&#xff0c;如出现SQL语句&#xff0c;接下来看看怎么实现的。 1.环境安装 第一章已经介绍了MySql安装&#xff0c;但注意需要…

【protobuf】ProtoBuf的学习与使用⸺C++

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;之前我们学习了Linux与windows的protobuf安装&#xff0c;知道protobuf是做序列化操作的应用&#xff0c;今天我们来学习一下protobuf。 目录 ⼀、初识ProtoBuf 步骤1&#xff1a;创建.proto文件 步…