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

news/2024/9/24 13:24:33/

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


http://www.ppmy.cn/news/1508952.html

相关文章

初识C++ · C++11(3)

前言&#xff1a; 本文介绍的是包装器以及线程库的简单了解&#xff0c;但是呢&#xff0c;线程是基于对Linux有一定的了解&#xff0c;所以本文就是简单介绍一下&#xff0c;介绍完包装器以及线程库的简单理解之后C11的特性就到此为止&#xff0c;当然C11远不止于此&#xff…

AR技术:汽车行业创新发展的新动力

在当今科技飞速发展的时代&#xff0c;增强现实技术&#xff08;AR&#xff09;正逐渐在各个领域展现出其独特的优势和应用价值。在汽车行业中&#xff0c;AR也扮演着越来越重要的角色&#xff0c;为汽车的设计、制造、维修和销售等环节带来了诸多创新和变革。以下是汽车行业中…

MySQL4 多表查询 内连接

内连接 多表查询内连接 多表查询 数据准备 CREATE DATABASE db4; USE db4; -- 创建部门表 create table if not exists dept(deptno varchar(20) primary key , -- 部门号name varchar(20) -- 部门名字 );-- 创建员工表 create table if not exists emp(eid varchar(20) pr…

8.4.数据库基础技术-SQL

大数据 特点&#xff1a;大量化(Volume)、多样化Variety)、价值密度低Value)、快速化(Velocity)。 大数据和传统数据的比较如下&#xff1a; 比较维度传统数据大数据数据量GB或TB级PB级或以上数据分析需求现有数据的分析与检测深度分析&#xff08;关联分析、回归分析&#…

RUST实现远程操作电脑手机

简介&#xff1a; Rust Desk 是一个开源的远程桌面软件&#xff0c;能够完全替代向日葵和ToDesk的功能&#xff0c;包括电脑控制电脑、电脑控制手机、手机控制电脑等。它是完全免费的。 下载&#xff1a; 需要下载 Rust Desk 的服务端和客户端安装包。 安装&#xff1a; 服务…

CUDA Programming - (1) CUDA简介

1. GPU 简介 处理器一般包含以下几部分&#xff1a;Cache 缓存&#xff0c;ALU 计算单元&#xff0c;Control 控制中心&#xff0c;RAM 内存。 CPU&#xff08;Central Processing Unit&#xff09;&#xff1a;中央处理器。适合进行逻辑&#xff0c;ALU计算核心较少。适合控…

UE开发中的设计模式(二) —— 中介者模式

上一篇文章介绍了观察者模式如何降低观察者和目标之间的耦合&#xff0c;并通过一个实例具体实现了观察者模式&#xff0c;本篇文章从上篇文章的实例继续&#xff0c;介绍中介者模式是如何带来对象间进一步的松耦合。 文章目录 问题提出概述问题解决总结优点缺点模式应用 参考资…

几个常用脚本

系统初始化 #!/bin/bash # 定义颜色常量 RED\033[0;31m GREEN\033[0;32m NC\033[0m # No Color #功能菜单 menu() {clearecho "请选择要执行的操作:"echo "1. 检查网络"echo "2. 关闭防火墙和SELinux"echo "3. 替换YUM源"echo "…