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

此篇博文算是【C#实战】Newtonsoft.Json基类子类解析_newtonsoft.json不能转化子类-优快云博客的一个补充,因为我发现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,如果读者有泛型的实现方法,欢迎评论区留言,感激不尽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值