如何使用kotlinx serializer序列化LocalDateTime?
解决kotlinx-serialization序列化LocalDateTime的缺失序列化器问题
你遇到的问题是因为kotlinx-datetime提供的LocalDateTime序列化器未被自动注册,需要显式导入并配置,具体解决步骤如下:
1. 确认依赖完整性
除已添加的kotlinx-datetime依赖,确保项目同时包含kotlinx-serialization-core依赖(版本需与datetime兼容,比如0.4.0版本的datetime对应1.6.0及以上的core):
// build.gradle.kts 示例 implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.0") implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.4.0")
2. 导入序列化器并配置
kotlinx-datetime库已内置LocalDateTimeSerializer,只需通过以下两种方式之一启用:
方式一:直接为属性指定序列化器
在包含LocalDateTime的可序列化数据类中,给对应属性添加注解指定序列化器:
import kotlinx.serialization.Serializable import kotlinx.datetime.LocalDateTime import kotlinx.datetime.serializers.LocalDateTimeSerializer @Serializable data class Event( val id: Int, // 显式指定使用LocalDateTimeSerializer @Serializable(with = LocalDateTimeSerializer::class) val timestamp: LocalDateTime )
方式二:全局注册序列化器
创建序列化模块并注册LocalDateTime的序列化器,后续所有使用该配置的序列化/反序列化操作都能自动处理LocalDateTime:
import kotlinx.serialization.json.Json import kotlinx.datetime.LocalDateTime import kotlinx.datetime.serializers.LocalDateTimeSerializer import kotlinx.serialization.modules.SerializersModule // 创建序列化模块,注册LocalDateTime的序列化器 val customSerializersModule = SerializersModule { contextual(LocalDateTime::class, LocalDateTimeSerializer) } // 使用带自定义模块的Json实例 val json = Json { serializersModule = customSerializersModule } // 示例序列化操作 val event = Event(1, LocalDateTime.now()) val jsonString = json.encodeToString(event)
内容的提问来源于stack exchange,提问作者Siang Cheng Pang
相关产品推荐
相关产品推荐

