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

使用Ktor从API获取数据时的Serializable序列化问题

解决Ktor序列化API返回数据的问题

核心问题分析

API返回的是User对象的JSON数组(顶层结构为[]),但你定义的Users类是包含userList字段的对象,结构完全不匹配;另外数据类中存在笔误:List<Department>应该改为List<User>。

修正方案

  1. 移除多余的包装类
    不需要Users类,直接将API返回的数组解析为List<User>即可。修正后的User数据类如下:

    @Serializable
    data class User(
        val email: String,
        val id: Int,
        @SerialName("user_name")
        val userName: String
    )
    
  2. 调整Ktor客户端配置(可选优化)
    当前场景不需要开启useArrayPolymorphism(该配置用于多态类型数组的解析),可以移除;同时建议开启ignoreUnknownKeys,避免API新增字段导致解析失败:

    val client = HttpClient(CIO) {
        install(ContentNegotiation) {
            json(Json {
                ignoreUnknownKeys = true
            })
        }
    }
    
  3. 修改请求解析逻辑
    将返回类型改为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:06:09