在 Unity 中使用 Json 库,有着多种方案
- UnityEngine.JsonUtility
- Newtonsoft.Json.JsonConvert
- System.Text.Json.JsonSerializer
Newtonsoft.Json | System.Text.Json | UnityEngine.JsonUtility | |
---|---|---|---|
JsonConvert | JsonSerializer | JsonUtility | |
序列化 | JsonConvert.SerializeObject(object); | JsonSerializer.Serialize(object); | JsonUtility.ToJson(object, isPrettyPrint); |
反序列化 | JsonConvert.DeserializeObject |
JsonSerializer.Deserialize |
JsonUtility.FromJson |
设置 | new JsonSerializerSettings { Formatting = Formatting.Indented }; | new JsonSerializerOptions { WriteIndented = true }; |
UnityEngine.JsonUtility
JsonUtility
是 Unity 引擎内置的一个轻量级 JSON 工具类,位于 UnityEngine
命名空间下。它提供了简单的 API 来进行对象与 JSON 字符串之间的转换。
示例代码:
[Serializable]
public class PlayerData
{
public string name;
public int level;
public float health;
}
// 序列化
PlayerData data = new PlayerData { name = "Alice", level = 5, health = 100f };
string json = JsonUtility.ToJson(data);
// 反序列化
PlayerData loadedData = JsonUtility.FromJson<PlayerData>(json);
Newtonsoft.Json.JsonConvert
Newtonsoft.Json(又称 Json.NET)是目前功能最全面、社区活跃度最高的 JSON 库之一
安装方式:
可以通过 Unity 的 NuGet 插件安装,或者手动导入 DLL 文件
示例代码:
PlayerData data = new PlayerData { name = "Bob", level = 10, health = 85.5f };
// 序列化
string json = JsonConvert.SerializeObject(data, Formatting.Indented);
// 反序列化
PlayerData loadedData = JsonConvert.DeserializeObject<PlayerData>(json);
System.Text.Json.JsonSerializer
System.Text.Json
是微软在 .NET Core 3.0 中推出的原生高性能 JSON 处理库,旨在替代 Newtonsoft.Json,提供更安全、更快的 JSON 操作能力。
安装
// TODO
⚠️ 注意:Unity 对 System.Text.Json
的支持取决于你使用的 .NET 运行时版本。你需要确保你的 Unity 项目使用的是 .NET Standard 2.1
或 .NET Framework 4.x Equivalent
,并且目标平台支持该库。
示例代码:
PlayerData data = new PlayerData { name = "Charlie", level = 15, health = 70.0f };
// 序列化
var options = new JsonSerializerOptions { WriteIndented = true };
string json = JsonSerializer.Serialize(data, options);
// 反序列化
PlayerData loadedData = JsonSerializer.Deserialize<PlayerData>(json, options);