当前位置: 首页 > news >正文

[Godot] C#使用Json进行数据结构的保存与加载

之前,我使用Godot内置的Resource类实现了游戏的保存与加载功能[Godot] C# 使用Resource类实现保存功能https://blog.csdn.net/qq_58742026/article/details/146168646然而,随着深入的使用,我发现其功能逐渐不能满足我的要求,最重要的一点是,他进行文件的存取必须使用 res://user:// 开头的路径,所以,对于我最近的使用来说,我需要换一种办法实现数据的存取

最终,我决定使用Json进行数据存取系统,下面我将给大家介绍一下我的实现过程

脚本编写

首先,为了方便使用,我决定先写一个类文件,这里我将我的代码分享给大家

using System;
using System.IO;
using System.Text.Json;public static class SaveHalper
{public static bool Save<T>(T data, string path){try{var json = JsonSerializer.Serialize(data, new JsonSerializerOptions { WriteIndented = true });      //序列化File.WriteAllText(path, json);return true;}catch{return false;}}public static T Load<T>(string path){try{var file = File.ReadAllText(path);return JsonSerializer.Deserialize<T>(file);    //反序列化}catch{return default;}}
}

通过这个脚本,我们可以方便的实现数据的存取

数据类编写

对于我们的数据类,我们需要按照下面的格式来写

using System;
using System.Collections.Generic;[Serializable]
public class Data
{public string Text { get; set; }//需要其他自定义类和数组还可以按下面的写public List<自定义结构类> cardDatas { get; set; } = new();
}

注意,我们需要写[Serializable]才能序列化,为了正常存取,变量需要转成属性

代码使用

这样,我们就能在脚本里面正常的存取了

var error = SaveHalper.Save(data, path);        //保存data数据到path路径var gameData = SaveHalper.Load<data>(path);       //读取path数据(data类型)到gameData
//其中,我们可以判断error来看保存是否正常,判断gameData是否为null来看读取是否正常

如上所述,我们就能实现数据的存取了

其他-数据保存

下面,我给大家分享一下我的保存代码

public bool Save(){if (data== null)return false;var error = SaveHalper.Save(data, path + ".tmp");      //创建临时文件if (!error)      //判断是否创建错误{DirAccess.RemoveAbsolute(path + ".tmp");        //移除临时文件return false;}if (FileAccess.FileExists(path))DirAccess.RemoveAbsolute(path);     //移除原文件DirAccess.RenameAbsolute(path + ".tmp", path);      //对临时文件重命名return true;}

这样,我们通过创建临时文件的方法,防止了文件保存错误导致原文件错误的问题,大家也可以随意修改分享代码,感谢观看!

http://www.dtcms.com/a/360986.html

相关文章:

  • QT中的TCP
  • 摄像头模块的电子集成设计
  • 开发使用mybatis是用混合模式还是全注解模式
  • pprint:美观打印数据结构
  • Spring Boot 和 Spring Cloud 的原理和区别
  • Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
  • 单例模式
  • Day19_【机器学习—线性回归 (3)—回归模型评估方法】
  • 网站模板源代码 静态网页网站模板
  • VBA数据库解决方案第二十二讲:根据工作表数据生成数据库中数据表
  • 零售行业的 AI 革命:从用户画像到智能供应链,如何让 “精准营销” 不再是口号?
  • 百胜软件获邀出席第七届中国智慧零售大会,智能中台助力品牌零售数智变革
  • 百胜软件×OceanBase深度合作,赋能品牌零售数字化实践降本增效
  • leetcode 面试题17.19 消失的两个数字
  • Java学习笔记-反射(二)
  • 无公网IP,怎么实现远程调试与APP端api 接入?
  • 红楼梦 AI HTML 分析 - 好了歌
  • MySQL内置的各种单行函数
  • Kafka消息中间件安装配置
  • Ruoyi项目MyBatis升级MyBatis-Plus指南
  • sentinel异常处理机制
  • 2025机器人产业大洗牌:新兴初创企业的技术革命与崛起之路
  • 【Spring Cloud微服务】8.深度实战:微服务稳定性的守护神——Sentinel
  • Linux下usb设备驱动框架实现:定义核心结构体数据
  • 从Java全栈开发到微服务架构:一次真实的面试实录
  • leetcode算法刷题的第二十三天
  • GitLab 18.3 正式发布,更新多项 DevOps、CI/CD 功能【一】
  • Linux上perf工具的使用-基础采样
  • 云端虚拟云手机该如何进行使用?
  • 高并发场景下的热点数据处理:从预热到多级缓存的性能优化实践