【问题标题】:Serialize ZonedDateTime in Kotlin data class在 Kotlin 数据类中序列化 ZonedDateTime
【发布时间】:2020-11-25 20:03:42
【问题描述】:

序列化数据类中的ZonedDateTime 字段时出现以下错误:

Type mismatch: inferred type is KClass<ZonedDateTimeSerializer> but KClass<out KSerializer<*>> was expected

这是我的课:

import com.fasterxml.jackson.datatype.jsr310.ser.ZonedDateTimeSerializer
import kotlinx.serialization.Serializable
import java.time.ZonedDateTime

@Serializable
data class MyClass(
    @Serializable(ZonedDateTimeSerializer::class)
    val time: ZonedDateTime
)

如何在 Kotlin 中序列化 ZonedDateTime

【问题讨论】:

标签: datetime kotlin jackson


【解决方案1】:

这就是我所做的:

object KZonedDateTimeSerializer : KSerializer<ZonedDateTime> {
    override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("ZonedDateTime", PrimitiveKind.STRING)

    override fun serialize(encoder: Encoder, value: ZonedDateTime) {
        encoder.encodeString(value.toString())
    }

    override fun deserialize(decoder: Decoder): ZonedDateTime {
        val string = decoder.decodeString()
        return ZonedDateTime.parse(string)
    }
}

这里是 OffsetDateTime。如果您不指定格式化程序,则如果分钟为零,则将其删除:

object KOffsetDateTimeSerializer : KSerializer<OffsetDateTime> {
    override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("OffsetDateTime", PrimitiveKind.STRING)

    override fun serialize(encoder: Encoder, value: OffsetDateTime) {
        val format = DateTimeFormatter.ISO_OFFSET_DATE_TIME

        val string = format.format(value)
        encoder.encodeString(string)
    }

    override fun deserialize(decoder: Decoder): OffsetDateTime {
        val string = decoder.decodeString()
        return OffsetDateTime.parse(string)
    }
}

【讨论】:

    猜你喜欢
    • 2017-10-21
    • 2020-12-26
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 2023-01-12
    相关资源
    最近更新 更多