Unity中数据存储_LitJson

文章目录

  • LitJson
    • 一:介绍
    • 二:特点
    • 三:使用
    • 四:注意事项

LitJson

一:介绍

LitJson 是一个专为 .NET 设计的轻量级 JSON 处理库,支持序列化和反序列化 JSON 数据。

二:特点

  1. 快速且轻量
    • 无外部依赖,仅包含几个核心类,适合嵌入到项目中。
    • 适用于小型到中型数据处理场景,性能高效。
  2. 灵活的反射机制
    • 默认支持公共字段/属性的序列化,可通过配置处理私有字段。
    • 支持自定义 JSON 键名映射(通过 JsonProperty 特性)。
  3. 流式处理与配置
    • 提供 JsonReaderJsonWriter 类,支持流式读写 JSON 数据。
    • 可配置 JSON 格式(如允许注释、单引号字符串等)。

三:使用

  1. JsonMapper.ToJson(object obj)

    1. 将对象转化为Json字符串

      public class SettingData
      {public float bgmVolume { get; set; }public float gameVolume{ get; set; }
      }SettingData setting = new SettingData 
      { bgmVolume = 1.0f,gameVolume = 1.0f
      };
      string json = JsonMapper.ToJson(setting);
      Debug.Log(json); // 输出:{"bgmVolume":1.0,"gameVolume":1.0}
      
  2. JsonMapper.ToObject<T>(string json)

    1. 将字符串反序列化为指定类型的对象

      string json = "\"bgmVolum\":1.0,\"gameVolume\":1.0";
      SettingData data = JsonMapper.ToObject<SettingData>(json);
      Debug.Log(data.bgmVolume); // 输出:1.0f
      
  3. JsonMapper.ToObject(string json)

    1. json字符串反序列为JsonData对象

      string json = "\"bgmVolum":1.0,\"gameVolume\":1.0";
      JsonData jsonData = JsonMapper.ToObject(json);
      Debug.Log(jsonData["bgmVolume"]); // 输出:1.0f
      
  4. JsonReaderJsonWriter

    1. 用于读写 JSON 数据,提供更灵活的 JSON 数据处理方式

    2. JsonWriter 可以用于构建嵌套 JSON 结构

      public class DataWriter
      {public static void Main(){StringBuilder sb = new StringBuilder();JsonWriter writer = new JsonWriter(sb);writer.WriteArrayStart();writer.Write(1);writer.Write(2);writer.Write(3);writer.WriteObjectStart();writer.WritePropertyName("color");writer.Write("blue");writer.WriteObjectEnd();writer.WriteArrayEnd();Debug.Log(sb.ToString()); // 输出:[1,2,3,{"color":"blue"}]}
      }
      
    3. JsonReader : 配置JsonReader的行为,例如是否允许注释和单引号字符串

      JsonReader reader = new JsonReader(json);
      reader.AllowComments = true;
      reader.AllowSingleQuotedStrings = true;
      JsonData data = JsonMapper.ToObject(reader);
      

四:注意事项

  • 在使用LitJson进行序列化时,不需要为类添加[System.Serializable]特性,这是因为litJson是直接通过反射访问的字段/属性。

  • 在默认情况下,仅序列化Public字段,如要需要序列号private字段 : 需通过 JsonMapper.Reflection 配置

    JsonMapper.Reflection.GetFieldFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
    
  • 如果当遇到需要键名与字段名不一致的情况,可以用JsonProperty特性显示指定

    public class SettingData
    {[JsonProperty("BGMVolume")]public float bgmVolume { get; set; } // 映射到 JSON 的 "BGMVolume"
    }
    
  • 如果对象之间存在继承关系( SettingData: Data ) , 反序列化时需要显示指定类型

    // 序列化子类
    SettingData setting = new SettingData 
    { bgmVolume = 1.0f,gameVolume = 1.0f
    };
    string json = JsonMapper.ToJson(setting);// 反序列化时需指定具体类型
    SettingData setting = JsonMapper.ToObject<SettingData>(json); // ✓
    Data data = JsonMapper.ToObject<Data>(json);   // ✗: 丢失子类字段
    

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

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

相关文章

2025年首届人形机器人半程马拉松比赛(附机器人照片)

2025年4月19日&#xff0c;北京亦庄半程马拉松暨人形机器人半场马拉松正式开赛&#xff0c;作为全球首届人形机器人户外跑步成功举办&#xff0c;21.0975公里的户外路程对人形机器人来讲&#xff0c;注定将成为历史性开篇&#xff0c;如果赛事能够持续举办&#xff0c;那举办意…

网络安全职业技能大赛Server2003

通过本地PC中渗透测试平台Kali对服务器场景Windows进⾏系统服务及版本扫描渗透测 试&#xff0c;并将该操作显示结果中Telnet服务对应的端⼝号作为FLAG提交 使用nmap扫描发现目标靶机开放端口232疑似telnet直接进行连接测试成功 Flag&#xff1a;232 通过本地PC中渗透测试平台…

[java八股文][Java基础面试篇]I/O

Java怎么实现网络IO高并发编程&#xff1f; 可以用 Java NIO &#xff0c;是一种同步非阻塞的I/O模型&#xff0c;也是I/O多路复用的基础。 传统的BIO里面socket.read()&#xff0c;如果TCP RecvBuffer里没有数据&#xff0c;函数会一直阻塞&#xff0c;直到收到数据&#xf…

Python常用的第三方模块之【jieba库】支持三种分词模式:精确模式、全模式和搜索引擎模式(提高召回率)

Jieba 是一个流行的中文分词Python库&#xff0c;它提供了三种分词模式&#xff1a;精确模式、全模式和搜索引擎模式。精确模式尝试将句子最精确地切分&#xff0c;适合文本分析&#xff1b;全模式则扫描文本中所有可能的词语&#xff0c;速度快但存在冗余&#xff1b;搜索引擎…

QT6 源(37):界面组件的总基类 QWidget 的源码阅读(下,c++ 代码部分)

&#xff08;1&#xff09; QT 在 c 的基础上增加了自己的编译器&#xff0c;以支持元对象系统和 UI 界面设计&#xff0c;有 MOC 、 UIC 等 QT 自己的编译器。本节的源代码里&#xff0c;为了减少篇幅&#xff0c;易于阅读&#xff0c;去除了上篇中的属性部分&#xff0c; 上篇…

rabbitmq-spring-boot-start版本优化升级

文章目录 1.前言2.优化升级内容3.依赖4.使用4.1发送消息代码示例4.2消费监听代码示例4.3 brock中的消息 5.RabbmitMq的MessageConverter消息转换器5.1默认行为5.2JDK 序列化的缺点5.3使用 JSON 进行序列化 6.总结 1.前言 由于之前手写了一个好用的rabbitmq-spring-boot-start启…

git lfs下载大文件限额

起因是用 model.load_state_dict(torch.load())加载pt权重文件时&#xff0c;出现错误&#xff1a;_pickle.UnpicklingError: invalid load key, ‘v’. GPT告诉我&#xff1a;你的 pt 文件不是权重文件&#xff0c;而是模型整体保存&#xff08;或根本不是 PyTorch 文件&#…

什么是RAG?RAG的主要流程是什么?

**RAG(Retrieval-Augmented Generation)**是一种结合检索与生成技术的框架,旨在通过引入外部知识增强生成模型的性能。其核心思想是:在生成文本时,先从外部知识库中检索相关信息,再将检索结果与原始输入结合,作为生成模型的输入,从而提升生成内容的准确性、相关性和信息…

【Rust 精进之路之第13篇-生命周期·进阶】省略规则与静态生命周期 (`‘static`)

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025年4月20日 引言:让编译器“读懂”你的意图——省略的艺术 在上一篇【生命周期入门】中,我们理解了生命周期的必要性——它是 Rust 编译器用来确保引用有效性、防止悬垂引用的关键机制。我…

Python爬虫实战:获取xie程网敦煌酒店数据并分析,为51出行做参考

一、引言 伴随互联网的飞速发展,在线旅游平台成为人们出行预订酒店的重要途径。xie程网作为国内颇具知名度的在线旅游平台,存有丰富的酒店信息。借助爬取xie程网的酒店数据并加以深入分析,能够为用户提供更为精准的酒店推荐,特别是在旅游旺季,如 51 出行期间。本研究致力…

第二十一讲 XGBoost 回归建模 + SHAP 可解释性分析(利用R语言内置数据集)

下面我将使用 R 语言内置的 mtcars 数据集&#xff0c;模拟一个完整的 XGBoost 回归建模 SHAP 可解释性分析 实战流程。我们将以预测汽车的油耗&#xff08;mpg&#xff09;为目标变量&#xff0c;构建 XGBoost 模型&#xff0c;并用 SHAP 来解释模型输出。 &#x1f697; 示例…

PyMC+AI提示词贝叶斯项目反应IRT理论Rasch分析篮球比赛官方数据:球员能力与位置层级结构研究

全文链接&#xff1a;tecdat.cn/?p41666 在体育数据分析领域不断发展的当下&#xff0c;数据科学家们致力于挖掘数据背后的深层价值&#xff0c;为各行业提供更具洞察力的决策依据。近期&#xff0c;我们团队完成了一项极具意义的咨询项目&#xff0c;旨在通过先进的数据分析手…

【android bluetooth 框架分析 03】【Bta 层详解 1】【Bluetooth Application Laye 介绍】

蓝牙协议栈中 Bluetooth Application Layer&#xff08;蓝牙应用层&#xff09;是协议栈核心组成部分&#xff0c;它位于协议栈中间偏上的位置&#xff0c;主要负责将底层 Bluetooth Stack&#xff08;如 L2CAP、AVDTP、RFCOMM、SDP 等&#xff09;与上层 Profile 和 Android F…

单片机获取真实时间的实现方法

单片机获取真实时间&#xff08;即当前的年月日、时分秒等&#xff09;通常需要依赖外部时间源或模块&#xff0c;因为单片机本身没有内置的实时时钟&#xff08;RTC&#xff09;功能。 在 C 语言环境下&#xff0c;单片机获取真实时间通常需要依赖 外部硬件模块&#xff08;如…

Linux——进程优先级/切换/调度

1.进程优先级 1.进程优先级是什么&#xff1a;进程获取CPU资源的先后顺序 2.为什么要有进程优先级&#xff1a;因为一般CPU只有一块&#xff0c;资源短缺&#xff0c;所以就需要优先级来确定谁先谁后的问题 3.值越低 进程的优先级越高 ps -l进行查看 UID&#xff1a;user id …

铸铁划线平板:多行业的精密测量工具(北重十字滑台加工厂家)

铸铁划线平板是一种用于精密测量和校准的工具&#xff0c;广泛应用于各个行业。它通常由铸铁制成&#xff0c;表面经过精密加工&#xff0c;能够保证较高的平整度和准确度。铸铁划线平板的主要作用是用来检验工件的平整度和垂直度&#xff0c;也常用于划线、校准和测量工件的平…

Excel/WPS表格中图片链接转换成对应的实际图片

Excel 超链图变助手&#xff08;点击下载可免费试用&#xff09; 是一款将链接转换成实际图片&#xff0c;批量下载表格中所有图片的转换工具&#xff0c;无需安装&#xff0c;双击打开即可使用。 表格中链接如下图所示&#xff1a; 操作方法&#xff1a; 1、双击以下图标&a…

STM32---串口通信USART

目录 一、串口通信协议 二、USART模块介绍 &#xff08;1&#xff09;移位寄存器 &#xff08;2&#xff09;控制电路 &#xff08;3&#xff09;波特率 &#xff08;4&#xff09;C语言接口 三、串口的引脚初始化 &#xff08;1&#xff09;引脚分布表 &…

流程架构是什么?为什么要构建流程架构,以及如何构建流程结构?

本文从&#xff1a;流程架构是什么&#xff1f;为什么要构建流程架构&#xff1f;如何构建流程结构三个方面来介绍。 一、首先&#xff0c;我们来了解流程架构是什么&#xff1f; 流程架构是人体的骨架&#xff0c;是大楼的砌筑&#xff0c;是课本的目录&#xff0c;是流程管理…

网络结构及安全科普

文章目录 终端联网网络硬件基础网络协议示例&#xff1a;用户访问网页 OSI七层模型网络攻击&#xff08;Hack&#xff09;网络攻击的主要类别&#xff08;一&#xff09;按攻击目标分类&#xff08;二&#xff09;按攻击技术分类 网络安全防御 典型攻击案例相关名词介绍网络连接…