JsonUtlity 是 Unity 自带的用于解析 Json 的公共类。它可以
将内存中对象序列化为 Json 格式的字符串
将 Json 字符串反序列化为类对象
using System.IO;
// 1.存储字符串到指定路径文件中
// 第一个参数:填写的是 存储的路径
// 第二个参数:填写的是 存储的字符串内容
// 注意:第一个参数 必须是存在的文件路径 如果没有对应文件夹 会报错
File.WriteAllText(Application.persistentDataPath + "/Test.json", "存储的json文件");
print(Application.persistentDataPath);
// 2.在指定路径文件中读取字符串
string str = File.ReadAllText(Application.persistentDataPath + "/Test.json");
print(str);
预备的数据结构:
[System.Serializable]
public class Student
{
public int age;
public string name;
public Student(int age, string name) {
this.age = age;
this.name = name;
}
}
public class MrTang
{
public string name;
public int age;
public bool sex;
public float testF;
public double testD;
public int[] ids;
public List ids2;
public Dictionary dic;
public Dictionary dic2;
public Student s1;
public List s2s;
[SerializeField] private int privateI = 1;
[SerializeField] protected int protectedI = 2;
}
使用方法:public static string ToJson(object obj)
// 序列化:把内存中的数据 存储到硬盘上
// 方法:
// JsonUtility.ToJson(对象)
MrTang t = new MrTang();
t.name = "xxx";
t.age = 18;
t.sex = false;
t.testF = 1.4f;
t.testD = 1.4;
t.ids = new int[] { 1, 2, 3, 4 };
t.ids2 = new List() { 1, 2, 3 };
t.dic = new Dictionary() { { 1, "123" }, { 2, "234" } };
t.dic2 = new Dictionary() { { "1", "123" }, { "2", "234" } };
t.s1 = null; // new Student(1, "小红");
t.s2s = new List() { new Student(2, "小明"), new Student(3, "小强") };
// Jsonutility提供了现成的方法 可以把类对象 序列化为 json字符串
string jsonStr = JsonUtility.ToJson(t);
File.WriteAllText(Application.persistentDataPath + "/MrTang.json", jsonStr);
注意:
使用方法:public static T FromJson
// 反序列化:把硬盘上的数据 读取到内存中
// 方法:
// JsonUtility.FromJson(字符串)
// 读取文件中的 Json字符串
jsonStr = File.ReadAllText(Application.persistentDataPath + "/MrTang.json");
// 使用Json字符串内容 转换成类对象
MrTang t2 = JsonUtility.FromJson(jsonStr, typeof(MrTang)) as MrTang;
MrTang t3 = JsonUtility.FromJson(jsonStr);
注意:
LitJson 是一个第三方库,用于处理 Json 的序列化和反序列化
它是 C# 编写的,体积小、速度快、易于使用
它可以很容易的嵌入到我们的代码中,只需要将 LitJson 代码拷贝到工程中即可
前往 LitJson 官网:LitJSON - Home
通过官网前往 GitHub 获取最新版本代码
点击此处下载最新版本:
将讲代码拷贝到 Unity 工程中,即可开始使用 LitJson
代码路径在 litjson-0.18.0 ->
src ->
LitJson
使用方法:public static string ToJson(object obj)
using LitJson;
MrTang t = new MrTang();
string jsonStr = JsonMapper.ToJson(t);
print(Application.persistentDataPath);
File.WriteAllText(Application.persistentDataPath + "/MrTang.json", jsonStr);
注意:
使用方法:public static T ToObject
// 方法:
// JsonMapper.ToObject(字符串)
jsonStr = File.ReadAllText(Application.persistentDataPath + "/MrTang2.json");
// JsonData 是 LitJson 提供的类对象 可以用键值对的形式去访问其中的内容
JsonData data = JsonMapper.ToObject(jsonStr);
print(data["name"]);
print(data["age"]);
// 通过泛型转换 更加的方便 建议使用这种方式
MrTang2 t2 = JsonMapper.ToObject(jsonStr);
注意:
如何选择两者:根据实际需求,建议使用LitJson
原因:LitJson 不用加特性,支持字典,支持直接反序列化为数据集合,存储 null 更准确