在Unity脚本中如何向后端服务器传递、接收与解析Json对象

技术概述

在前端与后端进行数据交换的时候,往往都采用将数据封装成Json对象进行传输。该方法是在unity脚本中向后端服务器传递、接收与解析Json对象的方法。

技术详述

传输:

image
以HttpWebRequest方式向后端传输信息,以Json形式发送。、

接收:

image
接收的前半部分在传输的图中,将服务器返回的信息以string形式接收,即传输图中responseFromServer。
然后,将该string解析为Json对象,即可通过该json对象取出对象中任意想要的值,例如单独取出data.code即返回码进行状态判断。

解析:

image
image
image
解析的要点在于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对象,后来发现只是少了这个标识。

参考文献

unity 常用的几种解析json方式
JSON转C#实体类

posted @ 2021-06-28 21:24  白石Re  阅读(1799)  评论(1编辑  收藏  举报