Unity游戏开发——Json序列化静态类

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Threading;
using System.Threading.Tasks;
using System.IO;
using System.Reflection;

/// <summary>
/// 可以序列化为Json的静态类,在里面添加字段并调用Save/Load来序列化保存和加载数据
/// </summary>
public static class JsonSerializeable
{
    public static PlayerData playerData;  //自定义数据类型

    #region 保存和加载功能的代码实现
    /// <summary>
    /// 保存的路径,根据需要修改 PlayerData(为文件名称)
    /// </summary>
    private static string SavePath = $"{Application.persistentDataPath}/PlayerData";


    /// <summary>
    /// 保存
    /// </summary>
    public static void Save()
    {
        Dictionary<string, object> fieldDic = new Dictionary<string, object>();
        Type type = typeof(JsonSerializeable);
        FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Static);
        foreach (FieldInfo fieldInfo in fieldInfos)
        {
            fieldDic[fieldInfo.Name] = fieldInfo.GetValue(null);
        }

        string json = JsonConvert.SerializeObject(fieldDic);
        string tempPath = SavePath + "_temp";
        Directory.CreateDirectory(Path.GetDirectoryName(SavePath));
        File.WriteAllText(tempPath, json);
        if (File.Exists(SavePath)) File.Delete(SavePath);
        File.Move(tempPath, SavePath);
    }

    /// <summary>
    /// 加载
    /// </summary>
    public static  void Load()
    {
        if (!File.Exists(SavePath)) { throw new Exception("文件不存在"); }
        string json = File.ReadAllText(SavePath);

        Dictionary<string, JToken> fieldDic = JsonConvert.DeserializeObject<Dictionary<string, JToken>>(json);
        Type type = typeof(JsonSerializeable);
        FieldInfo[] fieldInfos = type.GetFields(BindingFlags.Public | BindingFlags.Static);
        foreach (FieldInfo fieldInfo in fieldInfos)
        {
            if (fieldDic.ContainsKey(fieldInfo.Name))
            {
                fieldInfo.SetValue(null, fieldDic[fieldInfo.Name].ToObject(fieldInfo.FieldType));
            }
        }
    }

    /// <summary>
    /// 存档文件是否存在
    /// </summary>
    /// <returns></returns>
    public static bool FileExists()
    {
        return File.Exists(SavePath);
    }

  /// <summary>
    /// 删除存档
    /// </summary>
    public static void DeleteFile()
    {
        if (!File.Exists(SavePath))
        {
            File.Delete(SavePath);
        }
    }
    #endregion
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值