Unity中的Json字符串转对象

本文介绍了在Unity中,当Unity内置的JsonUtility无法满足复杂JSON转换需求时,如何利用Newtonsoft.Json库进行更强大的转换操作。通过示例代码展示了Newtonsoft.Json的用法,以及它如何成功解析包含嵌套对象的JSON字符串。
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 中,将 JSON 字符串换为对象可以通过 `JsonUtility` 类或第三方库(如 Newtonsoft.Json)实现。以下是两种常见方法: ### 使用 JsonUtility 类 Unity 提供了内置的 `JsonUtility` 类,可以用于序列化和反序列化 JSON 数据。需要注意的是,`JsonUtility` 仅支持类的公共字段和属性,且不支持嵌套对象或复杂数据结构的直接换。 ```csharp using UnityEngine; [System.Serializable] public class Person { public string name; public int age; } public class JsonExample : MonoBehaviour { public string jsonString = "{\"name\":\"xuhaitao\",\"age\":33}"; void Start() { Person person = JsonUtility.FromJson<Person>(jsonString); Debug.Log("Name: " + person.name + ", Age: " + person.age); } } ``` ### 使用 Newtonsoft.Json (Json.NET) 如果需要更强大的功能(如支持嵌套对象、泛型、私有字段等),推荐使用 [Newtonsoft.Json](https://www.newtonsoft.com/json) 库。该库需要手动导入到 Unity 项目中。 ```csharp using Newtonsoft.Json; public class Person { public string name { get; set; } public int age { get; set; } } public class JsonExample : MonoBehaviour { public string jsonString = "{\"name\":\"xuhaitao\",\"age\":33}"; void Start() { Person person = JsonConvert.DeserializeObject<Person>(jsonString); Debug.Log("Name: " + person.name + ", Age: " + person.age); } } ``` ### 嵌套对象解析示例 对于包含嵌套结构的 JSON 字符串,例如: ```json { "name": "xuhaitao", "age": 33, "friend": { "nameee": "xiaozhang", "age": 66, "pengyou": ["kk01", "kk02", "kk03"] } } ``` 可以定义对应的类结构进行解析: ```csharp using Newtonsoft.Json; public class Friend { public string nameee { get; set; } public int age { get; set; } public List<string> pengyou { get; set; } } public class Person { public string name { get; set; } public int age { get; set; } public Friend friend { get; set; } } public class JsonExample : MonoBehaviour { public string jsonString = "{\"name\":\"xuhaitao\",\"age\":33,\"friend\":{\"nameee\":\"xiaozhang\",\"age\":66,\"pengyou\":[\"kk01\",\"kk02\",\"kk03\"]}}"; void Start() { Person person = JsonConvert.DeserializeObject<Person>(jsonString); Debug.Log("Friend Name: " + person.friend.nameee); Debug.Log("Friend Age: " + person.friend.age); Debug.Log("Friend Pengyou Count: " + person.friend.pengyou.Count); } } ``` ### 总结 - **JsonUtility** 适用于简单对象的解析,且不需要额外引入库。 - **Newtonsoft.Json** 适用于复杂对象、嵌套结构和高性能需求的场景。 使用上述方法,可以灵活地将 JSON 字符串换为 Unity 中的对象[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值