跳到主要内容

常见问题

Json序列化的问题

程序集卸载后,会卸载所有类型元数据。而几乎所有常用的序列化库都会缓存类型的反射信息,这意味着如果你在代码中使用了Unity的JsonUtility或者LitJson之类的 序列库,它们会错误地缓存反射信息,导致你第二次(或者第三次)重新加载,并且反序列化时,会出错。

解决办法有几种:

  • 给被序列化或者反序列化的类型加上[Serializable]特性,如果这些类型中成员字段的类型也是class类型A或者A[],则也要给A也加上[Serializable]
  • 修改这些反序列化库的代码,在卸载程序集后,清空它们的反射缓存。像Unity的JsonUtility是native实现,无法清空缓存,只能更换为其他Json库。