Unity传递复杂Json数据

来源:互联网 发布:手机蓝牙打印机软件 编辑:程序博客网 时间:2024/05/22 09:47

由于项目中需要Unity和后台服务器间传递数据,而服务器程序采用Java语音编写,所以采用Json作为传递数据格式。

最开始使用Unity自带解决方案,5.3版本以上内置JsonUtility类来进行Json数据的序列化和反序列化,此方案对简单Json数据可以正常处理,但复杂Json数据则无法处理,会报此错误:ArgumentException: JSON must represent an object type。在网上搜索了很长时间也没能解决,遂放弃此方案。

JSON.NET For Unity插件,内部使用了Newtonsoft.Json对Json数据进行处理,对复杂Json数据也可以很好的处理,而且C#中的类可以不用专门指定序列化,比Unity内置的要好用多了。这里也顺便说一下Jsp中写Java语句的注意事项,jsp中定义的类只能在本页面中使用,它实例化的对象不能作为参数传给外部的函数。Java中使用了gson对Json进行处理。

下面举个例子说明一下。

Java中需要被序列化的类有两个属性,一个字符串类型和一个对象数组,然后用gson转为Json字符串传送给Unity。

public class DataJson {public String name;public Data[] datas;}

public class Data{        public Double value;public Date time;public Integer status;}

Unity接收到此Json串后,使用Newtonsoft.Json.Linq对其进行反序列化。

using Newtonsoft.Json.Linq;private void getData(string json){    var jo = JObject.Parse(json);//将json转换为对象    Data data = jo["datas"][0].ToObject<Data>();//此处Data类和Java中的结构完全一样}
由于取Json结构中的对象数组元素比较困难,所以这里只取Json数据中的datas数据,作为示例只取数组中第一个元素,取出后将其转换为Data类型对象,取数组中其他元素只要按此方法遍历即可。当然,要完全还原成DataJson类的结构还需要一些处理,但那已经很容易了,这里就省略掉了。这属于自定义的反序列化方式,如果使用默认方式是取不到 对象数组的值的。


0 0
原创粉丝点击