C#使用JSON数据
数据存储(序列化):将C#的数据格式,转化为JSON字符串,存储或传输
数据使用(反序列化):将JSON字符串中存储的数据,转化为C#可用的数据格式,实现代码逻辑
序列化(程序数据->JSON字符串)
反序列化(JSON字符串->程序数据)
Unity的JSON工具
类名:JsonUtility
序列化:ToJson()
//测试序列化(C#->JSON数据)
public void Serialize()
{//需要有C#数据OneRow data=new OneRow();data.Num=2;data.Name="呵呵";data.IsWoman="false";//将数据传递给JSON工具,会解析为JSON字符串,可用于存储或传输//参数1:C#数据//参数2:是否将JSON字符串格式化string j= JsonUtility.ToJson(data);Debug.Log(j);
}
反序列化:FromJson()
数据:string j="{\"Num\":1, \"Name\":\"root\", \"IsWoman\":false}";
C#与JSON对应的数据类型
//告诉Unity的JSON工具,解析JSON后,将数据存储在这个类型的对象中
public class OneRow
{public int Num;public string Name;public bool IsWoman;
}
//解析JSON为C#对象
//因为JsonUtility.FromJson<T>()需要提供C#数据类型与JSON对应,所以需要在C#中定义数据类型
//将j变量中存储的JSON结构,转化为C#的OneRow类型数据
//T:C#接收类型
//参数:JSON字符串
OneRow data=JsonUtility.FromJson<OneRow>(j);
Debug.Log(data.Name);
注意:如果使用了Unity的内置解析类,JSON最外层结构必须是对象结构
当一个类需要存储在另外一个成员变量中时,需要给类声明加特性
[System.Serializable] //类产生的对象数据,可以被序列化后存储
LitJson使用
官网
https://litjson.net/
https://github.com/LitJSON/litjson (看运气网址)
导入src文件夹中的Csharp文件到Unity项目的Assets文件中
NuGet Gallery | LitJson.Source 0.19.0
出现以下警告,将下图中的该行注释即可:
序列化
JsonMapper.ToJson();
反序列化
获得JsonData(类似C#的object):JsonMapper.ToObject()
获得指定类型:JsonMapper.ToObject<T>()
注意
反序列化不要求最外层是对象
对象内部存储对象不需要[System.Serializable]修饰Class声明
LitJson(JsonMapper.ToObject<T>())示例:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;public class TestJson : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){TextAsset asset = Resources.Load<TextAsset>("Json/JsonItem");string json = asset.text;List<int> data=JsonMapper.ToObject<List<int>>(json);Debug.Log(data[0]);}
}
LitJson(JsonMapper.ToObject())示例:引用前文的JSON道具数据(稍作修改)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;public class TestJson : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){//TestJsonData();TestItem();}public void TestJsonData(){TextAsset asset = Resources.Load<TextAsset>("Json/JsonItem");string json = asset.text;JsonData data=JsonMapper.ToObject(json);Debug.Log(data[0]);}void TestItem(){TextAsset asset = Resources.Load<TextAsset>("Json/WItem");string json = asset.text;JsonData data = JsonMapper.ToObject(json);Debug.Log(data[1]["Description"]);}
}
C#数据转json(litJson):
void TestToJson(){Debug.Log(JsonMapper.ToJson(new List<int> { 111, 222, 333 }));Debug.Log(JsonMapper.ToJson(new Dictionary<int, string> { { 1, "aa" }, { 2, "bb" },{ 3,"cc"} }));JsonData data = new JsonData();data["User"] = "admin";data["id"] = 123;data["Password"] = "15999";data["Des"] = null;Debug.Log(data.ToJson());}
TextAsset可以接受的文件类型
.txt .html .htm .xml .bytes .json .csv .yaml .fnt
该系列专栏为网课课程笔记,仅用于学习参考。