欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > Unity数据持久化 之 LitJson序列化与反序列化

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

2024/10/24 23:25:02 来源:https://blog.csdn.net/2301_77947509/article/details/141172248  浏览:    关键词:Unity数据持久化 之 LitJson序列化与反序列化

语法规则可以看这篇文章:Unity数据持久化 之 Json 语法速通-CSDN博客

1.LitJson是什么

LitJSON - Home,Release LitJSON 0.19.0 · LitJSON/litjson · GitHub

LitJSON是一个net库,用于处理与JSON (JavaScript Object Notation)字符串之间的转换

优点:小巧、快速和易于使用

快速而精简,没有外部依赖

只有几个类,可以很容易地嵌入到您自己的代码中,或者是一个非常小的程序集,可以随代码一起发布
代码是高度可移植的,这通常使得它很容易适应新的平台

LitJson和sonUtility的区别

     Unity数据持久化 之 Json序列化与反序列化-CSDN博客

导入代码包

 

 举例的数据及实例化

注意里面的字典,JsonUtility是不能存入字典的(当然,存入私有数据需要加序列化关键词。存入null值时会有默认值,不做演示)

public class Person {public int age;public int[] id = { 1, 2, 3 };public Dictionary<string, int> dic = new Dictionary<string, int>();public Children children;public List<Teacher> teacher;
}public class Children {public bool isBoy;
}public class Teacher {public string course;public Teacher(string c) {course = c;}
}
  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("数学老师"));

 2.序列化

引入命名空间

 JsonMapper.ToJson(person);
   // 将 JSON 数据保存到文件string filePath = Path.Combine(Application.persistentDataPath, "example.Litjson");File.WriteAllText(filePath, Litjson);Debug.Log($"JSON 数据已保存至:{filePath}");

打开保存到本地的文件,可以非常完美的将字典保存了,只是编码怪怪的 

不过,读字典是能读了,但是必须要string类型的键,不然你看文件中dic键值对都是双引号 ,如果你的键不是string类型吗,这在反序列化时是不被许可的

3.反序列化

索引器读

 //将 JSON 文件读取并返回成一个字符串string exampleLitjson = File.ReadAllText(Application.persistentDataPath+ "/example.Litjson");JsonData jsonData = JsonMapper.ToObject(exampleLitjson);print(jsonData["age"]);

泛型读

person = JsonMapper.ToObject<Person>(exampleLitjson);

还有一件事:如果序列化的类没有默认构造函数会报错,我没有声明有参构造顶掉无参构造,所以没报错,切记切记

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com