使用Ktor从API获取数据时的Serializable序列化问题
解决Ktor序列化API返回数据的问题
核心问题分析
API返回的是User对象的JSON数组(顶层结构为[]),但你定义的Users类是包含userList字段的对象,结构完全不匹配;另外数据类中存在笔误:List<Department>应该改为List<User>。
修正方案
移除多余的包装类
不需要Users类,直接将API返回的数组解析为List<User>即可。修正后的User数据类如下:@Serializable data class User( val email: String, val id: Int, @SerialName("user_name") val userName: String )调整Ktor客户端配置(可选优化)
当前场景不需要开启useArrayPolymorphism(该配置用于多态类型数组的解析),可以移除;同时建议开启ignoreUnknownKeys,避免API新增字段导致解析失败:val client = HttpClient(CIO) { install(ContentNegotiation) { json(Json { ignoreUnknownKeys = true }) } }修改请求解析逻辑
将返回类型改为List<User>,直接解析顶层数组:try { val userList: List<User> = client.get(url).body() Log.d("getDataFromUrl", "解析成功: $userList") } catch (e: Exception) { Log.d("getDataFromUrl", "解析失败: ${e.message}") }
补充说明
如果后续API返回结构改为包含userList字段的对象(例如{"userList": [{}, {}]}),再重新使用包装类Users即可,但当前API返回的是纯数组,直接解析为List<User>是最匹配的方案。
内容的提问来源于stack exchange,提问作者Artur Andruszkiewicz
相关产品推荐
相关产品推荐

