7.总结
1.1 知识点
总结主要内容
学习内容回顾
优点
缺点
主要用处
实践预告
7.2 核心要点速览
读取Json文件方法
操作 | 关键类/方法 | 代码示例 | 说明 |
---|---|---|---|
文件存读字符串 | File.WriteAllText | File.WriteAllText(Application.persistentDataPath + “/Test.json”, “存储内容”); | 将字符串存储到指定路径的文件中,路径需确保文件夹存在 |
文件存读字符串 | File.ReadAllText | string str = File.ReadAllText(Application.persistentDataPath + “/Test.json”); | 从指定路径的文件中读取字符串 |
JsonUtility
操作 | 关键类/方法 | 代码示例 | 说明 |
---|---|---|---|
序列化对象 | JsonUtility.ToJson | string jsonStr = JsonUtility.ToJson(t); | 将类对象序列化为JSON格式的字符串 |
反序列化对象 | JsonUtility.FromJson | MrTao t2 = JsonUtility.FromJson(jsonStr, typeof(MrTao)) as MrTao; | 将JSON字符串反序列化为类对象 |
LitJson
核心方法对比
操作 | JsonUtility | LitJson | 代码示例 |
---|---|---|---|
序列化对象 | JsonUtility.ToJson(对象) | JsonMapper.ToJson(对象) | json = JsonMapper.ToJson(player); |
反序列化对象 | JsonUtility.FromJson |
JsonMapper.ToObject |
PlayerInfo player = JsonMapper.ToObject(json); // LitJson |
序列化集合/数组 | 需包裹对象(如 [RoleData { List |
直接支持 List |
List roles = JsonMapper.ToObject
|
序列化字典 | 不支持(需转换为类) | 支持(键建议为 string) | Dictionary<string, int> dic = JsonMapper.ToObject<Dictionary<string, int>>(json); // LitJson |
关键注意事项
场景 | JsonUtility | LitJson | 说明 |
---|---|---|---|
特性要求 | 必须 [Serializable] + [SerializeField](私有成员) | 无强制特性(私有成员无法序列化) | LitJson 仅序列化公共字段 |
私有成员 | 需 [SerializeField] 才能序列化 | 忽略私有成员(无法序列化) | 私有字段直接跳过 |
字典支持 | 不支持(需手动转换) | 支持(键为 string 最佳) | Json 标准键为字符串,数值键会被转为字符串 |
集合/数组 | 需包裹对象 | 直接支持 List |
无需额外包装,与 Json 数组直接对应 |
null 处理 | 存储为默认值(如 0/“”) | 保留 null(需类成员允许) | 反序列化 null 时,类成员保持 null(需无参构造) |
构造函数 | 无要求 | 必须有无参构造函数(否则反序列化报错) | 复杂对象需提供无参构造(如 public Class() {}) |
编码格式 | 必须 UTF-8 | 必须 UTF-8 | 非 UTF-8 编码会导致乱码或加载失败 |
中文序列化 | 自动转义(如 \u4E2D) | 保留原始中文(无需转义) | LitJson 默认保留 Unicode 字符,可读性更好 |
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com