【Unity数据交互】Json序列化你记得几分

2023-11-03 01:28

本文主要是介绍【Unity数据交互】Json序列化你记得几分,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ˊˊ

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity基础实战

🅰️



文章目录

    • 🅰️
    • 前言
    • 🎶(==1==)持久数据文件夹
    • 🎶(==2==)JsonUtlity进行序列化
      • 🪶<font color=red>0. jsonUtilty的注意点(缺点)
      • 🪶1.将对象序列化成字符串(Json格式)
      • 🪶2.将Json反序列化成对象
      • 🪶3.练习(将序列化和反序列化变成方法调用)
    • 🎶(==3==)LitJson进行序列化
      • 🪶1.如何使用
      • 🪶<font color=red>2. LitJson的注意点
      • 🪶3.序列化
      • 🪶4.反序列化
      • 🪶5.练习
    • 🎶(==4==)JsonUtility和LitJson的区别ˊ---
    • 🅰️


前言


🎶(1持久数据文件夹


在这里插入图片描述

  • 先获取文件夹的位置

print(Application.persistentDataPath);

  • 1.存储字符串到指定路径文件中

File.WriteAllText(Application.persistentDataPath + “/text.json”,“这是我创建的新json脚本” );

  • 2.在指定路径文件中读取字符串

string str = File.ReadAllText(Application.persistentDataPath + “/Test.json”);


🎶(2JsonUtlity进行序列化


JsonUtility是Unity引擎中的一个工具类,用于将JSON字符串转换为Unity对象或将Unity对象转换为JSON字符串。它可以方便地在Unity游戏中进行JSON数据的序列化和反序列化,使开发者可以更轻松地处理JSON数据。JsonUtility是一个非常强大和实用的工具,可以被广泛应用于Unity游戏中的数据管理、网络通信、游戏存档等方面。

  • 现实作用:
    1.将对象序列化成Json格式
    2.将Json格式反序列化为对象

在这里插入图片描述

  • 引用 using System.IO

IO通常是指Input/Output(输入/输出)的缩写。在计算机中,IO是指数据在计算机内部和外部设备之间的传输和交换。例如,键盘和鼠标输入数据到计算机中,打印机、屏幕和音箱从计算机中输出数据。这种数据的输入和输出过程就是IO。


🪶0. jsonUtilty的注意点(缺点)


😶‍🌫️注意:

    1.float序列化时看起来会有一些误差2.被包裹的自定义类需要加上序列化特性[System.Serializable]3.想要序列化私有变量 需要加上特性[SerializeField]4.JsonUtility不支持字典5.JsonUtlity存储null对象不会是null 而是默认值的数据,比如空int 会变成06.JsonUtility无法直接反序列化读取数据集合"[]",需要用一个对象包裹它7.文本编码格式需要时UTF-8 不然无法加载

在这里插入图片描述

在这里插入图片描述


🪶1.将对象序列化成字符串(Json格式)


  • string jsonStr = JsonUtility.ToJson( dataGame );

           // DataGame 是类对象
    
  • File.WriteAllText(Application.persistentDataPath + “/text1.json”, jsonStr);

         //将序列化后的字符串数据存在文件夹中
    

🪶2.将Json反序列化成对象


  • jsonStr = File.ReadAllText(Application.persistentDataPath + “/text1.json”);

       //读取文件中的字符串 
    
  • DataGame dataGame = JsonUtility.FromJson< DataGame >(jsonStr);

      //使用Json字符串内容 转换成类对象
    
  • 代码

 jsonStr  = File.ReadAllText(Application.persistentDataPath + "/text1.json");DataGame dataGame = JsonUtility.FromJson<DataGame >(jsonStr);

🪶3.练习(将序列化和反序列化变成方法调用)


using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;[System.Serializable]
public class Item
{public int id;public int num;public Item( int ID,int NUM){id = ID;num = NUM;}
}public class BossInfo
{public string name;public int attack;public int defence;public float moveSpeed;public double roundSpeed;public Item weapon;public List<int> listInt;public List<Item> itemList;public Dictionary<int, Item> itemDic1;public Dictionary<string, Item> itemDic2;[SerializeField ]private int self = 2 ;[SerializeField]protected int pro = 3;   //序列化public void serilized(BossInfo obj){if(obj!=null ){string onjInfo = JsonUtility.ToJson(obj);File.WriteAllText(Application.persistentDataPath + ("/BossInfo.json"), onjInfo);}}//反序列化public BossInfo  RevSerilized(string path){if (path != null){string objInfo = File.ReadAllText(Application.persistentDataPath +"/"+ path);return JsonUtility.FromJson<BossInfo>(objInfo);}else return null;} 
}public class text : MonoBehaviour
{private void Start(){BossInfo boss = new BossInfo();boss.name = "鸭嘴兽";boss.attack = 100;boss.defence = 20;boss.moveSpeed = 50;boss.roundSpeed = 30;boss.weapon = new Item(001, 10);boss.listInt = new List<int>() { 1, 2, 3, 4 };boss.itemList = new List<Item>() { new Item(002, 10), new Item(003, 10) };boss.itemDic1 = new Dictionary<int, Item>() { { 1, new Item(002, 10) }, { 2, new Item(003, 10) } };boss.itemDic2 = new Dictionary<string, Item>() { { "鸭子1", new Item(003, 10) }, { "鸭子2", new Item(004, 10) } };boss.serilized(boss); //JsonUyility 不支持字典print(Application.persistentDataPath);boss.RevSerilized("BossInfo.json");}
}

🎶(3LitJson进行序列化


LitJson是一个用于C#和Unity的Json解析器和生成器。它可以将Json格式的数据解析为C#对象,也可以将C#对象序列化为Json格式的数据。它具有高效,易用和可扩展性的特点,在游戏开发、网站开发、物联网等领域广泛应用。

它是一个第三方库是第三方编写的(而UtilityJson是自己编写的),用于处理Json的序列化和反序列化,LitJson是C#编写的,体积小、速度快、易于使用

🪶1.如何使用


  • 在官网中跳转GitHub获取最新版本
    在这里插入图片描述
  • 将下好的版本中的C#脚本拖到Unity中
    在这里插入图片描述

🪶2. LitJson的注意点


  • 1.序列化不需要加特性
  • 2.不能序列化私有变量
  • 3.需要引用命名空间
  • 4.可以保存null值
  • 5.可以序列化字典,但是键必须是字符串类型否则会报错
  • 6.序列化类的时候一定要确保它有无参构造函数否则会报错
  • 7.可以直接读取数据集合[]
  • 8.文本编码格式需要时UTF-8 不然无法加载

🪶3.序列化


  • 和方式JsonUtility一样

  • string jsonStr = JsonMapper.ToJson(obj);

            // obj是类对象
    
  • File.WriteAllText(Application.persistentDataPath + “/text.json”, jsonStr);

            //将序列化后的字符串数据存在文件夹中
    

🪶4.反序列化


  • jsonStr = File.ReadAllText(Application.persistentDataPath + “/text.json”);

  • objInfo 2 = JsonMapper.ToObject< objInfo> (jsonStr);

       //通过泛型转换更方便
    
  • ②JsonData data = JsonMapper.ToObject(jsonStr);

       //JsonData是LitJson提供的类对象访问其中的内容要用键值对的形式去print(data["age"]);
    

🪶5.练习


using LitJson;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;public class Item
{public int id;public int num;public Item() { } //因为有参把他替换了所以需要重新声明public Item( int ID,int NUM){id = ID;num = NUM;}
}public class BossInfo
{public string name;public int attack;public int defence;public float moveSpeed;public double roundSpeed;public Item weapon;public List<int> listInt;public List<Item> itemList;public Dictionary<int, Item> itemDic1;public Dictionary<string, Item> itemDic2;private int self = 2 ;protected int pro = 3;   //LitJson序列化public void LSerilized(BossInfo obj){if (obj != null){string objInfo = JsonMapper.ToJson(obj);File.WriteAllText(Application.persistentDataPath + ("/BossInfo2"), objInfo);}}//LitJson反序列化public BossInfo RevLSerilized(string path){if(path != null ){string objInfo =  File.ReadAllText(Application.persistentDataPath +"/"+path );return   JsonMapper.ToObject<BossInfo>(objInfo);}else   return null;}
}public class text : MonoBehaviour
{private void Start(){BossInfo boss = new BossInfo();boss.name = "鸭嘴兽";boss.attack = 100;boss.defence = 20;boss.moveSpeed = 50;boss.roundSpeed = 30;boss.weapon = new Item(001, 10);boss.listInt = new List<int>() { 1, 2, 3, 4 };boss.itemList = new List<Item>() { new Item(002, 10), new Item(003, 10) };boss.itemDic1 = new Dictionary<int, Item>() { { 1, new Item(002, 10) }, { 2, new Item(003, 10) } };boss.itemDic2 = new Dictionary<string, Item>() { { "鸭子1", new Item(003, 10) }, { "鸭子2", new Item(004, 10) } };boss.LSerilized(boss); //JsonUyility 不支持字典print(Application.persistentDataPath);boss.RevLSerilized("BossInfo.json");}
}

🎶(4JsonUtility和LitJson的区别ˊ


  • 1.JsonUt1ity是Unity自带,LitJson是第三方需要引用命名空间
  • 2.JsonUt1ity使用时自定义类需要加特性,LitJson不需要
  • 3.JsonUt1ity支持私有变量(加特性),LitJson不支持
  • 4.JsonUt1ity不支持字典,LitJson支持(但是键只能是字符串)
  • 5.JsonUt1ity不能直接将数据反序列化为数据集合(数组字典),LitJson可以
  • 6.JsonUt1ity对自定义类不要求有无参构造,LitJson需要
  • 7.JsonUt1ity存储空对象时会存储默认值而不是nu11,LitJson会存null

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


这篇关于【Unity数据交互】Json序列化你记得几分的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/334610

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十