Unity3D的JsonUtility使用

记录一下使用 JsonUtility 遇到的坑.

1. 类或字段必须是可序列化的

  1. class 必须是 public 或者带[Serializable]的 Attribute.
  2. field 必须是 public 或带[SerializeField]的 Attribute.

[SerializeField]属性, 有 UnityEngine 提供, 表示序列化时需要强制序列化这个字段.

1
2
3
4
5
6
7
8
[Serializable]
internal class CfgBuild
{
    public int Id;
    public string Name;
    [SerializeField]
    private int Age;
}

2. 不支持解析 Json 的 Array

1
2
3
4
[
  { "ID": 1, "Name": "n1" },
  { "ID": 2, "Name": "n2" }
]

上面的 JSON 会直接反序列化失败. 但是支持 JSON 中包含 Array, 如下所示:

1
2
3
4
5
6
{
  "list": [
    { "ID": 1, "Name": "n1" },
    { "ID": 2, "Name": "n2" }
  ]
}

目前笔者搜索的解决方案也是在外部封装一层.

3. 不支持 get 和 set

1
2
//  get和set不支持
//  public int ret { get; set; }
不会报错,不影响代码执行。但是会导致反序列化后的bean没有赋值.

4. 其他

笔者使用还比较少, 没有详细去处理异常的状态. 扩展信息可以从参考资料中查看

5. 参考资料

  1. SerializeField 和 Serializable.

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 TinyZ Zzh (包含链接: https://tinyzzh.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。 如有任何疑问,请 与我联系 (tinyzzh815@gmail.com)

TinyZ Zzh

TinyZ Zzh

专注于高并发服务器、网络游戏相关(Java、PHP、Unity3D、Unreal Engine等)技术,热爱游戏事业, 正在努力实现自我价值当中。

评论

  点击开始评论...