美文网首页
Unity中将对象存储为json,并永久存储到磁盘中

Unity中将对象存储为json,并永久存储到磁盘中

作者: 全新的饭 | 来源:发表于2023-09-06 14:34 被阅读0次

提供方法

// 读取对象
Fan.JsonUtilities.JsonHelper.ReadFromJson<RoleData>(存储文件名称); 
// 读取对象数组
Fan.JsonUtilities.JsonHelper.ReadListFromJson<RoleData>(存储文件名称);
// 存储对象
Fan.JsonUtilities.JsonHelper.SaveAsJson(对象,存储文件名称);
// 存储对象数组
Fan.JsonUtilities.JsonHelper.SaveAsJson(对象数组,存储文件名称);
// 删除存储对象
Fan.JsonUtilities.JsonHelper.Delete(存储文件名称);

注意

要保存的字段的访问修饰符必须是public。
如果要存储对象数组,则该对象对应的类必须用[System.Serializable]标记。

代码

JsonHelper.cs

using System.ComponentModel;
using System.Linq;
using System.IO;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace Fan.JsonUtilities
{
    public static class JsonHelper
    {
        #region 读取、保存、删除
        public static List<T> ReadListFromJson<T>(string fileName)
        {
            string content = FileNameToContent(fileName);
            var result = new List<T>();
            if (IsValidContent(content))
            {
                result = ArrayJsonExtension.FromJson<T>(content).ToList();
            }
            return result;
        }

        public static T ReadFromJson<T>(string fileName)
        {
            string content = FileNameToContent(fileName);
            T result = default;
            if (IsValidContent(content))
            {
                result = JsonExtension.FromJson<T>(content);
            }
            return result;
        }
        public static bool SaveAsJson<T>(List<T> objs, string fileName)
        {
            return SaveAsJson(ArrayJsonExtension.ToJson<T>(objs.ToArray()), fileName);
        }

        public static bool SaveAsJson<T>(T obj, string fileName)
        {
            return SaveAsJson(JsonExtension.ToJson<T>(obj), fileName);
        }
        public static bool Delete(string fileName)
        {
            WriteFile(GetPath(fileName), string.Empty);
            return true;
        }
        #endregion

        private static string GetPath(string fileName)
        {
            return Application.persistentDataPath + "/" + fileName + ".json";
        }

        private static void WriteFile(string path, string content)
        {
            FileStream fileStream = new FileStream(path, FileMode.Create);
            using (StreamWriter writer = new StreamWriter(fileStream))
            {
                writer.Write(content);
            }
        }

        private static string ReadFile(string path)
        {
            if (File.Exists(path))
            {
                using (StreamReader reader = new StreamReader(path))
                {
                    string content = reader.ReadToEnd();
                    return content;
                }
            }
            return string.Empty;
        }

        private static string FileNameToContent(string fileName)
        {
            return ReadFile(GetPath(fileName));
        }

        private static bool IsValidContent(string content)
        {
            return !string.IsNullOrEmpty(content) && content != "{}";
        }

        private static bool SaveAsJson(string content, string fileName)
        {
            WriteFile(GetPath(fileName), content);
            return true;
        }

        private static class ArrayJsonExtension
        {
            public static T[] FromJson<T>(string json)
            {
                Wrapper<T> wrapper = JsonUtility.FromJson<Wrapper<T>>(json);
                return wrapper.objs;
            }
            public static string ToJson<T>(T[] array, bool prettyPrint = true)
            {
                Wrapper<T> wrapper = new Wrapper<T>();
                wrapper.objs = array;
                return JsonUtility.ToJson(wrapper, prettyPrint);
            }

            [Serializable]
            private class Wrapper<T>
            {
                public T[] objs;
            }
        }
        private static class JsonExtension
        {
            public static T FromJson<T>(string json)
            {
                T obj = JsonUtility.FromJson<T>(json);
                return obj;
            }
            public static string ToJson<T>(T obj, bool prettyPrint = true)
            {
                return JsonUtility.ToJson(obj, prettyPrint);
            }
        }
    }
}

相关文章

  • 备忘录模式在swift中的体现

    能将某个对象持久化存储起来,同时也能从磁盘中将该对象取出来。存储:将对象通过encode转成Data数据进行存储取...

  • 序列化 持久化

    持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应...

  • 第一个Hibernate!

    持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应...

  • Redis持久化机制

    1、什么是持久化 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘...

  • localStorage如何存储对象

    JSON对象存储 JSON对象提供的parse和stringify将其他数据类型转化成字符串,再存储到storag...

  • JavaScript对象表示法,JSON

    关于JSON JSON:JavaScriptObjectNotation(Java 对象表示法) JSON 是存储...

  • Hibernate-ORM框架基础

    对象保存在内存中,内存不能永久保存数据,如果要永久保存就需要对象持久化(将对象存储到数据库中).关系型数据库存放关...

  • iOS数据存储方式(Core Data/Keycahin/NSU

    前言 在iOS开发中数据存储的方式可以归纳为磁盘缓存和内存缓存:磁盘缓存分为两类:文件、数据库存储。 文件存储:N...

  • iOS中几种常用的数据存储方式

    自己稍微总结了一下下,方便大家查看 1、write直接写入文件的方法 永久保存在磁盘中,可以存储的对象有NSStr...

  • Java中的序列化与反序列化及xml

    java持久化 是将内存中的对象存储在数据库中,或者存储在磁盘文件中,xml数据文件中。 序列化 将对象的状态信息...

网友评论

      本文标题:Unity中将对象存储为json,并永久存储到磁盘中

      本文链接:https://www.haomeiwen.com/subject/bvbkvdtx.html