当前位置:   article > 正文

Unity传递复杂Json数据_unity jobject

unity jobject

由于项目中需要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。

  1. public class DataJson {
  2. public String name;
  3. public Data[] datas;
  4. }

  1. public class Data{
  2. public Double value;
  3. public Date time;
  4. public Integer status;
  5. }

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

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


本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号