Json管理器的使用

解释

JsonMgr 是一个用于管理 JSON 数据的工具类,负责将数据对象序列化为 JSON 格式并存储到硬盘中,同时支持从硬盘读取 JSON 文件并反序列化为对象。它支持两种不同的 JSON 序列化方式:Unity 的内置 JsonUtility 和第三方库 LitJson

核心功能概述:

  1. 存储 JSON 数据:将对象序列化为 JSON 字符串,并存储到硬盘的指定文件中。
  2. 读取 JSON 数据:从指定文件中读取 JSON 数据,并将其反序列化为对象。
  3. 支持不同的 JSON 序列化方式:支持通过 JsonType 参数选择使用 JsonUtilityLitJson 进行序列化和反序列化。

构造函数

  • JsonMgr():这是一个私有构造函数,确保类遵循单例模式。

公有方法解释:

  1. SaveData(object data, string fileName, JsonType type = JsonType.LitJson)

    • 用于将指定的 data 对象序列化为 JSON 字符串,并将其保存到 persistentDataPath 中的指定文件。你可以选择使用 JsonUtilityLitJson 序列化方案。
    • 参数解释:
      • data:要保存的数据对象。
      • fileName:保存文件的名称。
      • type:可选参数,默认使用 LitJson,也可以使用 JsonUtility
  2. LoadData<T>(string fileName, JsonType type = JsonType.LitJson)

    • 用于从指定路径读取 JSON 文件并将其反序列化为类型 T 的对象。如果在 streamingAssetsPathpersistentDataPath 路径中找不到该文件,则返回一个新创建的对象。
    • 参数解释:
      • fileName:要读取的文件名。
      • type:可选参数,默认使用 LitJson 进行反序列化,也可以选择使用 JsonUtility
    • 返回值:返回从 JSON 文件反序列化后的对象。

示例用例:

我们可以通过这个 JsonMgr 来管理游戏中的存档数据。假设我们有一个玩家数据 PlayerInfo 类,我们希望在游戏中保存和加载玩家的进度。

using LitJson;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;public class Item
{public int id;public int num;public Item() { }public Item(int id, int num){this.id = id;this.num = num;}
}public class PlayerInfo
{public string name;public int atk;public int def;public float moveSpeed;public double roundSpeed;public Item weapon;public List<int> listInt;public List<Item> itemList;public Dictionary<string, Item> itemDic2;
}
public class LitJsonTest : MonoBehaviour
{private void Start(){PlayerInfo player = new PlayerInfo();player.name = "曹旭阳";player.atk = 11;player.def = 5;player.moveSpeed = 1.5f;player.roundSpeed = 2.2f;player.weapon = new Item(1, 1);player.listInt = new List<int>() { 1, 2, 3, 4, 5 };player.itemList = new List<Item>() { new Item(2, 2), new Item(3, 3) };player.itemDic2 = new Dictionary<string, Item>() { { "1", new Item(6, 6) }, { "2", new Item(7, 7) } };//SaveData("LitJsonCao", player);//PlayerInfo player2 = LoadData("LitJsonCao");JsonMgr.Instance.SaveData(player, "CaoJson");PlayerInfo player2 = JsonMgr.Instance.LoadData<PlayerInfo>("CaoJson");Debug.Log(Application.persistentDataPath);Debug.Log(player2.name);}public void SaveData(string path,PlayerInfo player){string jsonStr = JsonMapper.ToJson(player);print(Application.persistentDataPath);File.WriteAllText(Application.persistentDataPath + "/" + path + ".json", jsonStr);}public PlayerInfo LoadData(string path){string jsonStr = File.ReadAllText(Application.persistentDataPath + "/" + path + ".json");PlayerInfo jsonInfo = JsonMapper.ToObject<PlayerInfo>(jsonStr);return jsonInfo;}}

流程说明:

  1. 创建玩家数据

    • 创建一个玩家数据对象 PlayerInfo,其中包含玩家的姓名、等级和分数。
  2. 保存玩家数据

    • 调用 SaveData() 方法,将玩家数据序列化为 JSON,并存储到文件中。默认使用 LitJson 进行序列化。文件名为 PlayerSaveData.json
  3. 加载玩家数据

    • 调用 LoadData() 方法,从文件 CaoJson.json 中读取玩家数据,并将其反序列化为 player2 对象。此时使用 LitJson 进行反序列化。
  4. 使用 JsonUtility 序列化和反序列化

    • 可以选择使用 JsonUtility 来保存和加载数据,这里保存到文件 默认的LitJson,并从中读取玩家数据。

注:

使用JsonUtlity可以序列化/反序列化构造函数,但是想要序列化内部类和私有字段分别需要加[System.Serializable]和[SerializeField]特性。LitJson不会序列化和反序列化构造函数和私有字段,但是LitJson序列化和反序列化内部类不需要加特性。

JsonUtlity不支持序列化字典。JsonLit支持序列化字典

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/57934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网络协议栈】Tcp协议(下)的可靠性和高效性(超时重传、快速重传、拥塞控制、流量控制)

绪论: 承接上文&#xff0c;上文写到Tcp协议的结构以及对tcp协议的性能优化的滑动窗口&#xff0c;本章我们将继续了解Tcp协议的可靠性和高效性的具体展示。后面我将继续完善网络协议栈的网络层协议敬请期待&#xff01; 话不多说安全带系好&#xff0c;发车啦&#xff08;建议…

【Docker】Dockerfile 用于组装镜像的指令都有啥?

背景 Dockerfile 是一个文本文件&#xff0c;其中包含了一系列的指令和参数&#xff0c;用于组装镜像。Dockerfile 支持多种指令&#xff0c;以下是主要的 Dockerfile 指令及其解释&#xff01; FROM 指定基础镜像。AS <name> 是可选的&#xff0c;用于给基础镜像设置一个…

小微企业园星级评定条件和要求

一、一至三星级评定 一至三星级园区&#xff0c;由各设区市参照《浙江省小微企业园绩效评价试行办法》自行组织评定。请各设区市于11月8日前完成一至三星级园区评定工作&#xff0c;并报省厅备案。 二、四至五星级评定 四至五星级园区&#xff0c;在园区申报、各设区市推荐基础…

【Qt】窗口——Qt窗口的概念、常用的窗口函数、菜单栏、工具栏、状态栏、浮动窗口、对话框

文章目录 Qt窗口Qt窗口的概念菜单栏工具栏状态栏浮动窗口对话框 Qt 窗口 Qt窗口的概念 QMainWindow 类概述&#xff1a; QMainWindow 是一个为用户提供主窗口程序的类&#xff0c;它继承自 QWidget 类&#xff0c;并且提供了一个预定义的布局。 菜单栏 菜单栏常用属性&#xf…

C语言初阶:十.结构体基础

♥感谢您阅读本篇文章&#xff0c;文章内容为个人对所学内容的整理总结&#xff0c;欢迎大佬在评论区指点一二。♥ ♥个人主页&#xff1a;折枝寄北-CSDN博客折枝寄北擅长C语言初阶,等方面的知识,折枝寄北关注python,c,java,qt,c语言领域.https://blog.csdn.net/2303_80170533?…

Android Kotlin中协程详解

博主前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住也分享一下给大家&#xff0c; &#x1f449;点击跳转到教程 前言 Kotlin协程介绍&#xff1a; Kotlin 协程是 Kotlin 语言中的一种用于处理异步编程的机制。它提供了一…

如何有效解除TikTok账号间的IP关联

在当今社交媒体环境中&#xff0c;TikTok凭借其独特的短视频形式吸引了数以亿计的用户。对许多内容创作者而言&#xff0c;运营多个账号是获取更大曝光和丰富内容的有效策略。然而&#xff0c;如何避免这些账号之间的IP关联&#xff0c;以防止被平台识别并封禁&#xff0c;成为…

标题:自动化运维:现代IT运维的革新力量

标题:自动化运维:现代IT运维的革新力量 随着信息技术的飞速发展,企业对于IT系统的依赖日益加深,系统的稳定性、可用性和安全性成为了业务连续性的关键。在这样的背景下,传统的手工运维方式已难以满足高效、快速响应的需求,自动化运维应运而生,成为了现代IT运维领域的革…

【数据结构】贪心算法:决策的艺术

贪心算法&#xff08;Greedy Algorithm&#xff09;是一类在每一步选择中都采取局部最优解的方法&#xff0c;希望最终能够达到全局最优解。通俗地说&#xff0c;贪心算法的思想就是“每一步都尽量做出最好的选择”&#xff0c;以期望整个过程的最终结果也达到最优状态。贪心算…

《Python网络安全项目实战》

《Python网络安全项目实战》 项目1 Python 环境安装任务1.1 Windows上安装Python任务1.2 Ubuntu环境下安装Python 项目2 Python基础练习任务2.1 使用数据类型任务2.2 使用组合数据类型任务2.3 使用控制结构任务2.4 使用函数任务2.5 使用模块 项目3 处理文件中的数据任务3.1 读文…

雷赛L6N伺服驱动器基本参数设置——EtherCAT 总线型

1、指令脉冲设置 PA0.08代表电机转一圈&#xff0c;所需要的指令脉冲数&#xff0c;该值驱动器默认值为0&#xff0c;该值更改后断电重启后生效。 2、编码器反馈脉冲设置 PA0.11&#xff0c;代表编码器输出每转脉冲数&#xff0c;实际反馈的脉冲数做了4倍频处理&#xff0c;设…

MySql数据库中数据类型

本篇将介绍在 MySql 中的所有数据类型&#xff0c;其中主要分为四类&#xff1a;数值类型、文本和二进制类型、时间日期、String 类型。如下&#xff08;图片来源&#xff1a;MySQL数据库&#xff09;&#xff1a; 目录如下&#xff1a; 目录 数值类型 1. 整数类型 2. …

【论文笔记】MLSLT: Towards Multilingual Sign Language Translation

&#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&#xff0c;为生民立命&#xff0c;为往圣继绝学&#xff0c;为万世开太平。 基本信息 标题: MLSLT: Towards Multiling…

系统架构设计师教程 第2章 2.6 计算机语言 笔记

2.6计算机语言 ★★★★☆ 2.6.1计算机语言的组成 计算机语言 (Computer Language) 是指用于人与计算机之间交流的一种语言&#xff0c;是人与计算机之间传递信息的媒介。 计算机语言主要由一套指令组成&#xff0c;指令一般包括表达式、流程控制和集合三大部分内容。 表达…

道路车辆功能安全 ISO 26262标准(9-2)—面向汽车安全完整性等级 (ASIL) 和安全的分析

写在前面 本系列文章主要讲解道路车辆功能安全ISO26262标准的相关知识&#xff0c;希望能帮助更多的同学认识和了解功能安全标准。 若有相关问题&#xff0c;欢迎评论沟通&#xff0c;共同进步。(*^▽^*) 1. 道路车辆功能安全ISO 26262标准 9. ISO 26262-9 面向汽车安全完整…

基于JSP的高校食堂食材选购管理系统【附源码】

基于JSP的高校食堂食材选购管理系统 效果如下&#xff1a; 系统首页界面 用户登录页面 食材信息页面 论坛交流界面 管理员登录界面 管理员功能主界面 食材信息管理界面 订单配送管理界面 用户功能主界面 商家功能主界面 司机功能主界面 研究背景 近年来互联网技术的发展使得…

新王Claude 3.5的6大应用场景

Anthropic AI深夜发布了备受期待的Claude 3.5系列更新&#xff0c;包括了全新升级的Claude 3.5 Sonnet和首发的Claude 3.5 Haiku。 Claude 3.5 Sonnet能够理解细微的指令和上下文&#xff0c;识别并纠正自身错误&#xff0c;还能从复杂数据中生成深入的分析和洞察。 结合最先进…

java项目之在线考试系统设计与实现(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的在线考试系统设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于JavaWeb技术…

PostgreSQL C++客户端API libpqxx的使用

PostgreSQL是一个先进的、开源的、免费的、功能强大的关系型数据库&#xff0c;缩写版是postgres。它使用一种客户端/服务器(C/S)的模型。一次PostgreSQL会话由下列相关的进程(程序)组成&#xff1a; (1).一个服务器进程&#xff0c;它管理数据库文件、接受来自客户端应用与数据…

C++研发笔记8——C语言程序设计初阶学习笔记6

在第一部分——课前准备的学习中&#xff0c;我就提到了学习C语言的过程中&#xff0c;练习是必不可少的环节&#xff0c;所以本篇笔记我们来进行记录我们学习《C语言程序设计初阶》阶段的第一篇练习文章。 题目一 下面哪个不是C语言内置的数据类型&#xff1a; A.char B.d…