You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 16:48:04