语法规则可以看这篇文章:Unity数据持久化 之 Json 语法速通-CSDN博客
Q:Unity是通过什么来对Json文件进行处理的?
A:JsonUtility:Unity 提供了 JsonUtility
类,用于将对象序列化为 JSON 字符串或将 JSON 字符串反序列化为对象。这是一个轻量级的 API,适用于简单的数据结构
用作示例的数据
public class Person {//值public int age;//数组public int[] id = { 1, 2, 3 };//字典public Dictionary<string, int> dic = new Dictionary<string, int>();//组合类public Children children;//List数组类public List<Teacher> teacher;}
public class Children {public bool isBoy;
}public class Teacher {public string course;public Teacher(string c) {course=c;}
}
1.序列化 (代码转json)
JSON(JavaScript Object Notation)序列化是一种基本的概念,用于将 JavaScript 对象或数组等数据结构转换为易于存储的格式,在 JavaScript 中,最常见的序列化格式是 JSON
对例子的数据进行初始化
Person person = new Person();person.age = 99;person.dic.Add("男生数量", 10);person.dic.Add("女生数量", 9);person.children = new Children(); // 初始化 Children 对象person.children.isBoy = true;person.teacher = new List<Teacher>(); // 初始化 Teacher 列表person.teacher.Add(new Teacher("语文老师"));person.teacher.Add(new Teacher("数学老师"));
序列化对象
string json = JsonUtility.ToJson(person);
Q:如何保存到硬盘中?(这里我挖个坑,回头总结一下)
可以用简单的方法File类中的静态方法
// 将 JSON 数据保存到文件string filePath = Path.Combine(Application.persistentDataPath, "example.json");File.WriteAllText(filePath, json);Debug.Log($"JSON 数据已保存至:{filePath}");
结果
似乎少了点什么?男女生数量在哪?
经过查询发现JsonUtility的缺点很明显,不但需要【serializable】关键词标记自定义的类(私有),还不支持一些常见数据类型
2.反序列化(json转代码)
JsonUtility 反序列化可以使用JsonUtility.FromJson
不过首先还是要读取json文件
//将 JSON 文件读取并返回成一个字符串
string jsonNew = File.ReadAllText(filePath);
然后就读取,注意泛型内填入你想转成的数据类型(前提是要合理)
person = JsonUtility.FromJson<Person>(jsonNew);