Unity 使用JSON实现本地数据保存和读取

using LitJson;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;


public class Person
{
    public int id { get; set; }
    public int level { get; set; }
    public int jiezhi_id { get; set; }
    public int jiezhi_level { get; set; }
    public int xianglian_id { get; set; }
    public int xianglian_level { get; set; }
    public int yifu_id { get; set; }
    public int yifu_level { get; set; }
    public int jineng_1_id { get; set; }
    public int jineng_1_level { get; set; }
    public int jineng_2_id { get; set; }
    public int jineng_2_level { get; set; }
    public int jineng_3_id { get; set; }
    public int jineng_3_level { get; set; }
}
public class PersonList
{
    public Dictionary<string, int> dictionary = new Dictionary<string, int>();
}
/// <summary>
/// 持久化存储角色装备信息
/// </summary>
public class CharacterData : MonoBehaviour
{
    public static CharacterData instance;
    public PersonList personList = new PersonList();
    public string JsonPerson_1 = "JsonPerson_1.json";
    public string JsonPerson_2 = "JsonPerson_2.json";
    public string JsonPerson_3 = "JsonPerson_3.json";
    public string JsonPerson_4 = "JsonPerson_4.json";
    public string JsonPerson_5 = "JsonPerson_5.json";
    public string JsonPerson_6 = "JsonPerson_6.json";
    //临时字典  存储读取的信息
    public Dictionary<string, int> tempDictionary = new Dictionary<string, int>();
    private void Awake()
    {
        instance = this;
    }
    void Start()
    {


    }
    /// <summary>
    /// 判断是否能找到路径
    /// </summary>
    /// <param name="name">要找的文件名字</param>
    /// <returns></returns>
    public bool GetJsonPath(string name) {
        string filePath = Application.persistentDataPath+ "//" + name;
        if (!File.Exists(filePath))  //不存在就创建键值对
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    /// <summary>
    /// 保存JSON数据到本地的方法
    /// </summary>
    /// <param name="player">要保存的对象</param>
    /// <param name="name">保存的文件名字</param>
    public void Save(Person player,string name)
    {
        //打包后persistentDataPath能存储文件
        string filePath = Application.persistentDataPath + "//"+ name;
        Debug.Log(Application.persistentDataPath+ "//" + name);

        if (!File.Exists(filePath))  //不存在就创建键值对
        {
            personList.dictionary.Add("ID", player.id);
            personList.dictionary.Add("LEVEL", player.level);
            personList.dictionary.Add("JIEZHI_ID", player.jiezhi_id);
            personList.dictionary.Add("JIEZHI_LEVEL", player.jiezhi_level);
            personList.dictionary.Add("XIANGLIAN_ID", player.xianglian_id);
            personList.dictionary.Add("XIANGLIAN_LEVEL", player.xianglian_level);
            personList.dictionary.Add("YIFU_ID", player.yifu_id);
            personList.dictionary.Add("YIFU_LEVEL", player.yifu_level);
            personList.dictionary.Add("JINENG1_ID", player.jineng_1_id);
            personList.dictionary.Add("JINENG1_LEVEL", player.jineng_1_level);
            personList.dictionary.Add("JINENG2_ID", player.jineng_2_id);
            personList.dictionary.Add("JINENG2_LEVEL", player.jineng_2_level);
            personList.dictionary.Add("JINENG3_ID", player.jineng_3_id);
            personList.dictionary.Add("JINENG3_LEVEL", player.jineng_3_level);

        }
        else   //若存在就更新值
        {
            personList.dictionary["ID"] = player.id;
            personList.dictionary["LEVEL"] = player.level;
            personList.dictionary["JIEZHI_ID"] = player.jiezhi_id;
            personList.dictionary["JIEZHI_LEVEL"] = player.jiezhi_level;
            personList.dictionary["XIANGLIAN_ID"] = player.xianglian_id;
            personList.dictionary["XIANGLIAN_LEVEL"] = player.xianglian_level;
            personList.dictionary["YIFU_ID"] = player.yifu_id;
            personList.dictionary["YIFU_LEVEL"] = player.yifu_level;
            personList.dictionary["JINENG1_ID"] = player.jineng_1_id;
            personList.dictionary["JINENG1_LEVEL"] = player.jineng_1_level;
            personList.dictionary["JINENG2_ID"] = player.jineng_2_id;
            personList.dictionary["JINENG2_LEVEL"] = player.jineng_2_level;
            personList.dictionary["JINENG3_ID"] = player.jineng_3_id;
            personList.dictionary["JINENG3_LEVEL"] = player.jineng_3_level;
        }

        //找到当前路径
        FileInfo file = new FileInfo(filePath);
        //判断有没有文件,有则打开文件,,没有创建后打开文件
        StreamWriter sw = file.CreateText();
        //ToJson接口将你的列表类传进去,,并自动转换为string类型
        string json = JsonMapper.ToJson(personList.dictionary);
        //将转换好的字符串存进文件,
        sw.WriteLine(json);
        //注意释放资源
        sw.Close();
        sw.Dispose();

        AssetDatabase.Refresh();

    }

    /// <summary>
    /// 读取保存数据的方法
    /// </summary>
    /// <param name="name">要读取文件名字</param>
    public void LoadPerson(string name)
    {
        string filePath = Application.persistentDataPath+ "//" + name;
        if (!File.Exists(filePath))  //不存在就创建键值对
        {
            print("路径不存在");
            return;
        }
        //读取数据,转换成数据流
        StreamReader streamreader = new StreamReader(filePath);
        //转换成json数据
        JsonReader jsonReader = new JsonReader(streamreader);
        //转化为jsonData
        JsonData jsdata3 = JsonMapper.ToObject(jsonReader);
        //print(jsdata3["ID"]);
        //清空临时字典   重新添加数据
        tempDictionary.Clear();
        tempDictionary.Add("ID",int.Parse(jsdata3["ID"].ToString()));
        tempDictionary.Add("LEVEL",int.Parse(jsdata3["LEVEL"].ToString()));
        tempDictionary.Add("JIEZHI_ID",int.Parse(jsdata3["JIEZHI_ID"].ToString()));
        tempDictionary.Add("JIEZHI_LEVEL", int.Parse(jsdata3["JIEZHI_LEVEL"].ToString()));
        tempDictionary.Add("XIANGLIAN_ID", int.Parse(jsdata3["XIANGLIAN_ID"].ToString()));
        tempDictionary.Add("XIANGLIAN_LEVEL",int.Parse(jsdata3["XIANGLIAN_LEVEL"].ToString()));
        tempDictionary.Add("YIFU_ID", int.Parse(jsdata3["YIFU_ID"].ToString()));
        tempDictionary.Add("YIFU_LEVEL", int.Parse(jsdata3["YIFU_LEVEL"].ToString()));
        tempDictionary.Add("JINENG1_ID",int.Parse(jsdata3["JINENG1_ID"].ToString()));
        tempDictionary.Add("JINENG1_LEVEL", int.Parse(jsdata3["JINENG1_LEVEL"].ToString()));
        tempDictionary.Add("JINENG2_ID", int.Parse(jsdata3["JINENG2_ID"].ToString()));
        tempDictionary.Add("JINENG2_LEVEL", int.Parse(jsdata3["JINENG2_LEVEL"].ToString()));
        tempDictionary.Add("JINENG3_ID", int.Parse(jsdata3["JINENG3_ID"].ToString()));
        tempDictionary.Add("JINENG3_LEVEL", int.Parse(jsdata3["JINENG3_LEVEL"].ToString()));
        //释放资源
        streamreader.Close();
        streamreader.Dispose();
        //在这里循环输出表示读到了数据,,即此数据可以使用了
        for (int i = 0; i < jsdata3.Count; i++)
        {
            Debug.Log(jsdata3[i]);
        }
    }
	void DeleteFile(string path, string name)

    {

        File.Delete(path + "//" + name);



    }
    private void Update()
    {   //点击读取存储的文件
        //if (Input.GetKeyDown(KeyCode.A))
        //{
        //    LoadPerson(JsonPerson_1);
        //}
        //if (Input.GetKeyDown(KeyCode.B))
        //{
        //    //初始化人物信息
        //    Person person = new Person();
        //    person.id = 10;
        //    person.level = 2;
        //    person.jiezhi_id = 3;
        //    person.jiezhi_level = 40;
        //    person.xianglian_id = 5;

        //    //调用保存方法
        //    Save(person, JsonPerson_1);
        //}
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值