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"]);
}
}
}