Kotlin序列化找不到UUID类型序列化器,能否用@file:UseSerializers解决?
问题解决方案
你可以使用@file:UseSerializers(UUIDAsStringSerializer::class)实现文件级的序列化器配置,无需为每个UUID属性单独标记@Serializable注解,你当前的报错是几个版本适配和配置遗漏问题,按以下步骤修复即可:
1. 补全编译期OptIn配置
Kotlin 1.5.31对应的kotlinx-serialization版本中,@file:UseSerializers属于实验性API,除了基础的kotlin.RequiresOptIn,还需要额外启用序列化框架的实验特性许可,修改gradle配置如下:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions { freeCompilerArgs += [ "-Xopt-in=kotlin.RequiresOptIn", "-Xopt-in=kotlinx.serialization.ExperimentalSerializationApi" ] } }
2. 确认注解作用域覆盖范围
@file:UseSerializers的作用域仅限定于当前注解所在的.kt文件:
- 如果你的
BusinessProcessBase子类和基类在同一个文件,现有配置即可生效 - 如果子类分散在其他.kt文件,需要在每个用到UUID序列化的文件头部都加相同的
@file:UseSerializers注解 - 如需整个模块全局生效无需重复加注解,可以在模块的
resources/META-INF/services/目录下创建名为kotlinx.serialization.KSerializer的文件,写入内容mypack.UUIDAsStringSerializer即可全局注册UUID序列化器
3. 版本适配校验
确认你使用的kotlinx-serialization版本和Kotlin 1.5.31匹配,对应适配的序列化版本为1.3.0 ~ 1.3.3,不要使用1.4及以上的版本,避免版本兼容导致的序列化器找不到问题。
内容的提问来源于stack exchange,提问作者Thomas Anderson
相关产品推荐
相关产品推荐

