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

Kotlin Serialization中@SerialName对Boolean类型失效问题求助

问题原因及解决方案

核心问题:混用了不同序列化库的注解

你代码里用的是kotlinx.serialization.SerialName注解,但实际用GSON做序列化——这俩是完全独立的序列化框架,GSON根本不识别Kotlin官方序列化库的注解。

为什么String/Int类型看似有效?

这只是巧合:要么你给GSON配置了FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES这类命名策略,自动把驼峰命名的字段转成下划线格式,刚好和你写的@SerialName值重合;要么JSON里的键碰巧和GSON默认处理后的字段名匹配。但本质上GSON完全没读取这个注解,只是结果刚好一致而已。

Boolean类型失效的原因

GSON处理canSing字段时,只会按自己的规则匹配JSON键:如果没配置命名策略,就直接用字段原名canSing去匹配;如果有命名策略,就按策略转换后的名字匹配。但你加的kotlinx注解对GSON来说等于不存在,自然没法把canSing映射到can_sing。而把字段名改成can_sing后,GSON直接用这个名字匹配JSON键,所以能正常工作。

解决办法

把kotlinx.serialization.SerialName换成GSON专属的com.google.gson.annotations.SerializedName注解即可,修改后的代码如下:

import com.google.gson.annotations.SerializedName

data class Person (
    @SerializedName("first_name") val firstName: String? = null,
    @SerializedName("last_name") val lastName: String? = null,
    val age: Int? = null,
    @SerializedName("can_sing") val canSing: Boolean? = null
)

内容的提问来源于stack exchange,提问作者TJ Olsen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:24:17