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
- Unity传递复杂Json数据
- [Unity][JSON][csv][JSONUnity]csv-JSON复杂数据的管理
- 使用jquery传递复杂Json数据——[ModelBinder(typeof(JsonBinder<复杂实体类>))]
- 复杂JSON输出数据
- 窗体间传递复杂数据
- 窗体间传递复杂数据
- 窗体间传递复杂数据
- 窗体间传递复杂数据
- 窗体间传递复杂数据
- 窗体间传递复杂数据
- 窗体间传递复杂数据
- 窗体间传递复杂数据
- 窗体间传递复杂数据
- 窗体间传递复杂数据
- AIDL服务-传递复杂数据
- 使用Bundle传递复杂数据
- Intent复杂数据的传递
- 利用Intent传递复杂数据
- 电子系统动态范围的理解
- 小程序开发之网络请求
- Java类型系统
- SVN 本地目录被手动删除后,cleanup时提示删除的目录被locked.
- 基础练习 2n皇后问题 dfs
- Unity传递复杂Json数据
- android 读取WebView缓存及清理WebView缓存
- SQL SERVER 实现转置功能
- Win10虚拟机安装Linux(Hyper-V+ubuntu)
- 体育竞技游戏的团队AI
- linux批量替换文件内容3种方法(perl,sed,shell)
- ZooKeeper此例简单介绍基于docker的zookeeper安装与集群搭建
- C#开发人员应该知道的13件事情
- Tomcat系列- tomcat如何避免遭遇ClassNotFoundException