欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > Unity的JSON工具类+LitJson的引入及使用

Unity的JSON工具类+LitJson的引入及使用

2025/3/26 13:59:38 来源:https://blog.csdn.net/m0_74236534/article/details/146445194  浏览:    关键词:Unity的JSON工具类+LitJson的引入及使用
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

该系列专栏为网课课程笔记,仅用于学习参考。    

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com