Unity数据持久化——Json

301 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情

什么是数据持久化

数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称。用通俗的话讲就是将游戏数据存储到硬盘,硬盘中数据读取到游戏中,也就是传统意义上的存盘。

Json是什么?

直译:JavaScript(对象简谱)

它是一种轻量化的数据交换格式,可以用于传输数据,本地数据存储和读取。使用 JSON 来进行数据持久化是一种常见的方法,因为它是轻量级的文本格式,易于读写和解析。

在 Unity 中,可以使用 JsonUtility 类将对象序列化为 JSON 字符串,并使用它反序列化为对象。

举个例子:

// 将对象序列化为 JSON 字符串string json = JsonUtility.ToJson(object);

// 将 JSON 字符串反序列化为对象Object obj = JsonUtility.FromJson<Object>(json);

要使用 JsonUtility 进行序列化和反序列化,对象必须具有 [System.Serializable] 属性。这样,可以通过使用 JsonUtility.FromJson 和 JsonUtility.ToJson 方法来序列化和反序列化该类型的对象。

JsonUtility是什么?

它是Unity自带的用于解析Json的公共类,可以将内存中对象序列化为Json格式的字符串,或者将Json字符串反序列化为类对象。

举个例子:

[System.Serializable]public class MyObject

{

    public int field1;

    public string field2;

}

MyObject obj = new MyObject();

obj.field1 = 42;

obj.field2 = "Hello, world!";

string json = JsonUtility.ToJson(obj);

// json 现在包含序列化后的 JSON 字符串

MyObject obj2 = JsonUtility.FromJson<MyObject>(json);

// obj2 现在是反序列化后的 MyObject

此外,还可以使用第三方库(例如 Newtonsoft.Json)来进行 JSON 序列化和反序列化。这些库通常具有更多的功能。

JsonUtlity注意事项
  1. 如果Json中数据少了,读取到内存中类对象中时不会报错;

  2. JsonUtlity无法直接读取数据集合,需要在Json文件中包裹一层对象("对象名":[...]);

  3. Json文档编码格式必须是UTF-8,否则会报错。