Unity 序列化 [System.Serializable] 相关知识点(得思斋Zero)
ABSTRACT
2017-12 得思斋博客文章。从一个「为什么需要标记」的推演视角解释 [Serializable] 特性的由来:它不是 .NET 核心概念,而是序列化工具类与调用方之间的约定标记;并总结 Unity 中需要加该标签的典型场景。
核心要点
- [Serializable] 是序列化 attribute:标记类可序列化为流、并可反序列化还原,便于网络传输与持久化保存。
- 设计推演:开发者需要序列化工具 → 部分字段不想序列化,于是有 NonSerialized 标记 → 工具无法区分「全部都要序列化」与「不知道序列化这回事」的类,于是要求用 Serializable 显式声明意图。
- 序列化本质是远程对象访问技术(类似 Java RMI):典型场景是 Session 存入状态服务器/SQL Server——标记让不能序列化的类型「提前崩溃」,好过带错误数据继续执行。
- 该标记只是「随随便便加的标注」,并不能真正保证对象可序列化。
- 需要 [Serializable] 的场景:对象存入 ListView、Session、JSON;Unity 中需要在 Inspector 中编辑并保存的自定义类。
关键实体与概念
System.Serializable、NonSerialized、序列化/反序列化、attribute、Inspector、Session 状态存储
关联概念
来源回溯
- 原始文件:
raw/ip/wechat_articles/Unity序列化[System.Serializable]相关知识点 - 得思斋Zero.md(2017-12-28)
时效性评估
- 仍有效:[Serializable] 语义与 Unity Inspector 序列化规则至今未变;「标记只是意图声明、不保证可序列化」的洞察依然准确。
- 已过时:.NET 自身已更多使用 System.Text.Json / MessagePack 等现代序列化方案(各有特性标记);Unity 侧新增了 [SerializeField]、[SerializeReference](多态序列化)等更细粒度工具,大数据配置推荐 ScriptableObject 或 JSON,但自定义类的 Inspector 显示仍以 [Serializable] 为基础。