Unity访问网络API的时候,经常需要对Json字符串进行转换。Unity自带了一个Json转换的类JsonUtility。但是这个类功能不够强大,只能进行简单的转换。
其实Unity已经将Newtonsoft.Json内置进去了。
这个功能就比JsonUtility强大很多。使用的时候,添加一个引用即可。
用JsonUtility转换就无法把backResult转换出来,用Newtonsoft.Json就可以转换出正确结果。
例如下面代码:
using UnityEngine;
using Newtonsoft.Json;
public class JsonToObj : MonoBehaviour
{
string jsonString = "{\"code\":200,\"msg\":\"成功\",\"backResult\":{\"sessionID\":\"205ec794-767f-4fd7-ab6e-7d087989e990\",\"rtmpAddr\":\"rtmp://122.1.11.30:20002/live/205ec794-767f-4fd7-ab6e-7d087989e990?user=scth\",\"flvAddr\":\"http://122.1.11.30:20007/flv?port=20002&app=live&stream=205ec794-767f-4fd7-ab6e-7d087989e990&user=scth\",\"hlsAddr\":\"http://122.1.11.30:20007/hls/205ec794-767f-4fd7-ab6e-7d087989e990.m3u8?user=scth\",\"code\":200,\"info\":\"推送成功\"}}";
void Start()
{
StreamingGet sg;
sg = JsonUtility.FromJson<StreamingGet>(jsonString);
Debug.Log("JsonUtility.FromJson");
Debug.Log("code:" + sg.code);
Debug.Log("backResult:" + sg.backResult);
//Debug.Log("backResult.seesion:" + sg.backResult.sessionID);
sg = JsonConvert.DeserializeObject<StreamingGet>(jsonString);
Debug.Log("JsonConvert.DeserializeObject");
Debug.Log("code:" + sg.code);
Debug.Log("backResult:" + sg.backResult);
Debug.Log("backResult.seesion:" + sg.backResult.sessionID);
}
}
运行后的效果
源码链接:https://gitee.com/BackFlowLake/UnityAndJson
本文介绍了在Unity中,当Unity内置的JsonUtility无法满足复杂JSON转换需求时,如何利用Newtonsoft.Json库进行更强大的转换操作。通过示例代码展示了Newtonsoft.Json的用法,以及它如何成功解析包含嵌套对象的JSON字符串。
1536

被折叠的 条评论
为什么被折叠?



