Unity序列化之Json
讲道理Unity自带的JsonUtility库在Unity5之后就已经实装,而且性能也强,但是无奈网上的博客大多都是各种复读机,以致于国内我看好多帖子用的都是第三方的Json库。

要使用 JsonUtility 不用额外导入名字空间,这个类下面,我们能使用的一共就三个接口

其中 FromJson 是反序列化,用于将Json文件读取到我们所指定的变量中,如果是带引用的类,官方推荐使用 FromJsonOverwrite
函数原型:



使用示例:



ToJson 则是将变量序列化为 Json 字符串,便于我们保存至本地或者进行网络传输。其重载的第二个参数为设定导出后的 Json 字符串格式,默认是 false,如果设置为 true,那么最终的内容包含换行符(也就是更好看的意思)
虽然 JsonUtility 可以序列化多种类型的变量,包括各类数字,集合,不过要说明的是,只有公开 public 的字段会被序列化,字典暂时是无法进行序列化的,属性也是无法序列化的,[System.NonSerialized] 标签修饰的字段以及私有字段也会不序列化

不知道是我记错了还是啥原因,我记得以前List可以直接序列化,但是前两天在写到相关功能的时候发现序列化的结果是空值,到处翻资料,发现了一个新的标签 [SerializeReference] 在加上这个标签之后,可以正确序列化。

对于我们自定义的类,只需要添加 [System.Serializable] 标签就可以正常序列化,但是如果将其放置在 列表中,那么必须再使用一个类进行包裹,才可以正常序列化。

2020年11月30日更新:
和小伙伴讨论了一下,因为List类型并不是object的子类,所以直接将List类型传入ToJson会导致空值,所以就不能直接传入List类型的值,最好的办法就是像上图一样把列表放在一个类中,让Unity把这个类序列化成Json字符串.
对于[SerializeReference] 这个标签,只对引用类型有效,其实加不加,问题应该不大,如果有问题就加上吧...