UD3L3——JsonUtility
UD3L3——JsonUtility
JsonUtility
JsonUtlity
是Unity自带的用于解析Json的公共类,它可以:
- 将内存中对象序列化为Json格式的字符串
- 将Json字符串反序列化为类对象
本章代码关键字
1 | File.WriteAllText() //将字符串存储到指定路径中 |
知识点
- 必备知识点 —— File存读字符串的方法 ReadAllText() 和 WriteAllText()
-
JsonUtlity
提供的序列化反序列化方法 ToJson() 和 FromJson() - 自定义类需要加上序列化特性[System.Serializable]
- 私有保护成员 需要加上
[SerializeField]
-
JsonUtlity
不支持字典 -
JsonUtlity
不能直接将数据反序列化为数据集合 - Json文档编码格式必须是UTF-8
在文件中存读字符串
存储字符串到指定路径文件中
- 第一个参数 填写的是 存储的路径
- 第二个参数 填写的是 存储的字符串内容
- 注意:第一个参数 必须是存在的文件路径 如果没有对应文件夹 会报错
1 | string test = "{\n\t\"name\": \"SevenL\"\n}"; |
在指定路径文件中读取字符串
1 | string str = File.ReadAllText(Application.persistentDataPath + "/Test.json"); |
使用JsonUtlity进行序列化
序列化:把内存中的数据 存储到硬盘上
参数:要序列化的类对象
1 | JsonUtility.ToJson() |
1 | MrTang t = new MrTang(); |
序列化注意事项
- float序列化时在Json文件里看起来会有一些误差,但是反序列化时并不影响
- 自定义类需要加上序列化特性[System.Serializable](最外层的类,或者说要序列化的对象的类可以不加,但类里面的自定义类需要加)
- 想要序列化私有变量 需要加上特性[SerializeField]
-
JsonUtility
不支持字典 -
JsonUtlity
存储null
对象不会是null
而是默认值的数据
使用JsonUtlity进行反序列化
反序列化:把硬盘上的数据 读取到内存中
参数:Json字符串;要序列化的类型;返回值:object(因此需要as)(这个方法不常用)
泛型方法,泛型填入要序列化的类型,参数:Json字符串,这个方法可以直接返回类对象,因此更常用
1 | JsonUtility.FromJson() |
1 | jsonStr = File.ReadAllText(Application.persistentDataPath + "/SevenL |
反序列化注意事项
如果Json中数据少了,读取到内存中类对象中时不会报错,会返回默认值
JsonUtlity注意事项
-
JsonUtlity无法直接读取数据集合,会报错(Json文件内为一个中括号[]列表转载多个大括号{}对象)
如果一定要读取,请将该数据集合包裹在一个对象内
1
2
3
4jsonStr = File.ReadAllText(Application.persistentDataPath + "/RoleInfo.json");
print(jsonStr);
//List<RoleInfo> roleInfoList = JsonUtility.FromJson<List<RoleInfo>>(jsonStr);
RoleData data = JsonUtility.FromJson<RoleData>(jsonStr); -
文本编码格式需要时UTF-8 不然无法加载
补充:从Json文件反序列化并覆写对象
JsonUtility.FromJsonOverwrite()
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!