在用Unity做开发的时候,一些配置表,服务器通信的数据交换等,多以json格式实现。其中常用到的json解析方式包括以下几种:
1.Unity自带的API:JsonUtility类
JsonUtility.FromJson(json);将一个json字符串解析成一个类对象
JsonUtility.ToJson;将一个类对象转化成一个json字符串
通过上述描述,可知使用该类是需要相应的有一个类并且这个类是标记了[Serializable],类字段也是必须是可序列化的,私有的字段或者被标记[NonSerialized]的字段将被忽略。
切记:json字符串的key需要和类字段的名字完全一样
不能解析复杂嵌套的json字符串
2. 使用第三方的LitJson插件
JsonMapper.ToObject(json);将一个json字符串解析成一个类对象
JsonMapper.ToJson;将一个类对象转化成一个json字符串
还提供了stream的方式处理JSON数据,提供的接口是jsonreader和jsonwriter。LitJson这个插件功能很强大可以完成更复杂的json字符串的解析。但是也有个缺点就是json字符串中的key也需要和类字段的名字完全一致,如果不对应的话会解析失败。
3.第三种方式就是今天要说的Newtonsoft.Json即Json.Net
JsonConvert.DeserializeObject(json);将一个json字符串解析成一个类对象
JsonConvert.SerializeObject;将一个类对象转化成一个json字符串
Json.Net功能强大,可以完成复杂的json字符串解析,并且性能相当出色。并且上面两种方式存在的缺点它都不存在:
比如json字符串中不存在Age,但是类有Age字段,在反序列化的时候对象的Age会初始化空,但是不会报错;
再比如json字符串中存在name,而类字段是Name,也完全可以完成反序列化,会把name赋值给对象的Name字段;
再比如json字符串中存在int id,但是类字段是string id,也就是说只要两者的类型可以转化,则完全不影响反序列的完成。
正是这些特性,使得使用Json.Net来完成json字符串的解析工作,变得更加的简单方便。
更多特性可以访问官网查看:https://www.newtonsoft.com/json
领取 专属20元代金券
Get大咖技术交流圈