在 Unity 中处理 json
Unity 中处理Json的方式
UnityEngine.JsonUtility
这个是 Unity 自带的 Json处理方式
// 将 obj 转换成 json
var jsonString = JsonUtility.ToJson(obj, true);
// 将 json 转换成 obj,T 为 obj 的类型
var obj = JsonUtility.FromJson<T>(jsonString);
但这个方式有很大的局限性,就是无法处理 Dictionary 和 Array
System.Runtime.Serialization.Json
这个是 .net 中的序列化库,要求 Unity 开启 .net4.x 支持
为了方便使用,对这个库进行了一下简单的封装
public static class Json
{
public static T FromJson<T>(string json) where T : class
{
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
var jsonSerializer = new DataContractJsonSerializer(typeof(T));
return jsonSerializer.ReadObject(stream) as T;
}
}
public static string ToJson<T>(T obj)
{
using (var stream = new MemoryStream())
{
var jsonSerializer = new DataContractJsonSerializer(typeof(T));
jsonSerializer.WriteObject(stream, obj);
return Encoding.UTF8.GetString(stream.ToArray());
}
}
}
这个类使用方式类似 Unity 的 JsonUtility
使用这种方式需要注意
- 首先,需要开启 .net4.x 支持
- 在移动平台上(iOS/Android)打包的时候,如果开启了 [Strip Engine Code] 选项,这个库可能会被优化掉,需要强制 link [System.Runtime.Serialization] 这个库,原因在【这里】
<?xml version="1.0" encoding="utf-8"?>
<linker>
<assembly fullname="System.Runtime.Serialization" preserve="all"/>
</linker>