Gson调用toJson返回JSON字符串而非JSON对象问题求解
问题原因
你调用Gson.toJson()得到的是JSON格式的纯字符串,直接传给Socket.IO的emit方法时,客户端会把它当做普通字符串参数传输,对应服务端收到的就是一个字符串类型的值,而非可直接读取的JSON对象。Web、Swift端可以正常识别的核心原因是直接传递了自定义实例给emit,客户端库内部完成了序列化逻辑,直接输出JSON对象结构。
解决方案
有两种可行方案,推荐优先使用第一种:
方案1:直接传递DTO实例
Socket.IO Android客户端支持自动序列化符合要求的实例对象,不需要提前手动转JSON字符串,修改代码如下:
val payload = LoadUserDTO(userGuid = user.guid!!, userToken = user.token!!) // 直接传递实例,不需要手动调用toJson this.socketService.socket.emit(EndpointsEnum.AppLoadUser, payload)
方案2:手动转成JsonObject类型传递
如果你的场景需要提前做JSON处理,可以将实例转为Gson的JsonObject类型再传递,不要转成字符串:
val payload = LoadUserDTO(userGuid = user.guid!!, userToken = user.token!!) // 转成JsonObject而非字符串 val jsonPayload = Gson().toJsonTree(payload).asJsonObject this.socketService.socket.emit(EndpointsEnum.AppLoadUser, jsonPayload)
内容的提问来源于stack exchange,提问作者smb
相关产品推荐
相关产品推荐

