在 Kotlin 数据中序列化 ZonedDateTime class
Serialize ZonedDateTime in Kotlin data class
当我序列化数据 class 中的 ZonedDateTime
字段时出现以下错误:
Type mismatch: inferred type is KClass<ZonedDateTimeSerializer> but KClass<out KSerializer<*>> was expected
这是我的 class:
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
?
这是我所做的:
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)
}
}
当我序列化数据 class 中的 ZonedDateTime
字段时出现以下错误:
Type mismatch: inferred type is KClass<ZonedDateTimeSerializer> but KClass<out KSerializer<*>> was expected
这是我的 class:
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
?
这是我所做的:
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)
}
}