Json工具类

using System;
using System.IO;
using UnityEngine;

[Serializable]
//Json工具类 负责处理游戏对象与json字符串之间的序列化与反序列化
public class JsonTool
{
    //默认保存数据的库的名字
    private const string DefaultName="GameData.json";

    
    //将json字符串持久化到默认文件
    public static void Save(string jsonStr)
    { 
        Save(DefaultName,jsonStr);
    }
    
    //将json字符串持久化到指定文件
    public static void Save(string fileName, string jsonStr)
    {
        //文件保存的路径
        string filePath = Application.dataPath + @"/" + fileName;
        //保存字符串到文件中,如果发现该路径下没有文件,就会自动创建一个该文件
        File.WriteAllText(filePath,jsonStr);
    }

    //从默认文件中读取json字符串
    public static string Load()
    {
        return Load(DefaultName);
    }
    //从文件中读取json字符串
    public static string Load(string fileName)
    {
        //文件读取路径
        string filePath = Application.dataPath + @"/" + fileName;
        //文件中读取字符串并返回
        return File.ReadAllText(filePath);
    }

    //序列化
    public static string Serializable(object obj)
    {
        return JsonUtility.ToJson(obj);
    }

    //反序列化
    public static T DeSerializable<T>(string jsonStr)where T:class
    {
        return JsonUtility.FromJson<T>(jsonStr);
    }
}
using System;--------------屠龙刀--------------
using UnityEngine;
[Serializable]

public class Knife
{
    public string name;
    public int attack;
    public float price;
    public int naijiu;
    public string msg;
    public Vector3 _transform;
    public Quaternion rota;
}

public class KnifeDragon: MonoBehaviour
{
    public Knife _knife;
    
    private void Update()
    {
        _knife.rota = transform.rotation;
        _knife._transform = transform.position;
        if (Input.GetKeyDown(KeyCode.K))
        {
            _knife.naijiu -= 100;
        }
    }
}




using UnityEngine;
using UnityEngine.UI;

public class KnifeManage : MonoBehaviour
{
    public Text knifeText;
    public GameObject knifePre;

    //序列化
    public void Serialize()
    {
        GameObject knifeobj=GameObject.FindWithTag("Knife");
        Knife knife = knifeobj.GetComponent<KnifeDragon>()._knife;
        string knifestr = JsonTool.Serializable(knife);
        knifeText.text = knifestr;
        JsonTool.Save("KnifeDragon.json",knifestr);
    }

    //反序列化
    public void DesSerialize()
    {
        GameObject objknife=GameObject.FindWithTag("Knife");
        if (objknife!=null)
        {
            Destroy(objknife);
        }
        string knifeStr = JsonTool.Load("KnifeDragon.json");
        knifeText.text = knifeStr;
        Knife knife = JsonTool.DeSerializable<Knife>(knifeStr);
        objknife = Instantiate(knifePre, knife._transform, knife.rota);
        objknife.name = knife.msg;
        objknife.GetComponent<KnifeDragon>()._knife=knife;
    }
}
using LitJson;---------LitJson文件------------
using UnityEngine;
/*
 * .lib文件———静态库文件,在源代码编译阶段作为可执行程序的一部分发布到最终包里的文件,不需要运行时动态加载,打包速度变慢,包体变大
 *            无论库中的函数有没有用到,都会加载
 *
 * .dll文件——动态库文件,是在程序运行时根据需求动态加载库文件中的函数,最终包体较小,可以随时加载随时卸载,效率偏低,动态的io比较
 *           耗时间
 *
 * litjson不能识别中文,但是不影响解析
 * 1.不需要在类前面加可序列化标识
 * 2.不需要额外去创建各种类
 */
public class LitJsonTest : MonoBehaviour
{
    private void Start()
    {
        Fun1();
        Fun2();
    }

    /// <summary>
    /// 第一种方法序列化与反序列化
    /// </summary>
    private  void Fun1()
    {
        Person p1=new Person();
        p1.name = "林月如";
        p1.age = 16;
        p1.skill = "冰心诀";
        //序列化
        string jsonStr= JsonMapper.ToJson(p1);
        Debug.Log(jsonStr);
        //反序列化
        Person p2= JsonMapper.ToObject<Person>(jsonStr);
        Debug.Log(p2.name);
    }

    /// <summary>
    /// 第二种方法创建json和解析对象
    /// </summary>
    private void Fun2()
    {
        //创建数据
        JsonData hero1=new JsonData();
        hero1["Name"] = "赵灵儿";
        hero1["age"] = 17;
        hero1["skill"] = "万箭穿心";
        JsonData hero2=new JsonData();
        hero2["Name"] = "林月如";
        hero2["age"] = 13;
        hero2["skill"] = "冰心诀";
        //hero数组
        JsonData heroArr=new JsonData();
        heroArr.Add(hero1);
        heroArr.Add(hero2);
        //heroArr类
        JsonData heroDatas=new JsonData();
        heroDatas["heros"] = heroArr;
        
        string jsonstr = JsonMapper.ToJson(heroDatas);
        Debug.Log(jsonstr);
        
        //解析数据
        JsonData heross= JsonMapper.ToObject(jsonstr);
        JsonData heroarr = heross["heros"];
        foreach (JsonData item in heroarr)
        {
            Debug.Log(item["Name"]);
        }

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值