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
相关产品推荐
相关产品推荐

