在Unity脚本中如何向后端服务器传递、接收与解析Json对象
技术概述
在前端与后端进行数据交换的时候,往往都采用将数据封装成Json对象进行传输。该方法是在unity脚本中向后端服务器传递、接收与解析Json对象的方法。
技术详述
传输:
以HttpWebRequest方式向后端传输信息,以Json形式发送。、
接收:
接收的前半部分在传输的图中,将服务器返回的信息以string形式接收,即传输图中responseFromServer。
然后,将该string解析为Json对象,即可通过该json对象取出对象中任意想要的值,例如单独取出data.code即返回码进行状态判断。
解析:
解析的要点在于C#实体类的转化,将需要的Json对象转化为C#实体类(这一步可以通过网站自动转化),然后利用该实体类以及unity自带的JsonUtility,依图上方式,即可实现。
技术使用中遇到的问题和解决过程
首先是实体类的转化,为了正确解析Json对象和接收数据必须按照后端要求的Json格式正确转化实体类,这一点通过找到能够进行自动转化的网站解决了。
另一个问题,必须在实体类前加上[Serializable],否则对于嵌套对象无法正确接收,如上图中的return data实体类包含了UserInfo实体类对象,若没有加上[Serializable]字段,那么该实体类无法正确解析后端传来的Json对象中,与UserInfo实体类对象对应的部分,具体的表现形式即上图中data对象可以正确接收并调用data.code与data.messge等,但调用data.userInfo.nickName等将会得到空值,即没有正确接收或解析。
加上[Serializable]即解决。
总结
Unity脚本的编写以C#为基础,但是一些关键东西的写法与C#并不相同,比如Json对象的解析可以使用unity自带的JsonUtility,为此必须先将Json对象格式转化为实体类。
在游戏的制作中,前后端互相传输数据是非常关键的部分,因此这一技术虽然简单,但是必不可少,也毫无疑问是构建游戏的基础也是核心。
[Serializable]是个坑,一开始还以为JsonUtility不能正确解析带嵌套的Json对象,后来发现只是少了这个标识。