Unity数据持久化 之 Json序列化与反序列化

语法规则可以看这篇文章: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);

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值