序列化Kotlin数据类中的ZoneDateTime
在序列化数据类中的序列化Kotlin数据类中的ZoneDateTime,datetime,kotlin,jackson,Datetime,Kotlin,Jackson,在序列化数据类中的zoneDateTime字段时,出现以下错误: Type mismatch: inferred type is KClass<ZonedDateTimeSerializer> but KClass<out KSerializer<*>> was expected 如何在Kotlin中序列化ZoneDateTime?以下是我所做的: object KZonedDateTimeSerializer : KSerializer<ZonedD
zoneDateTime
字段时,出现以下错误:
Type mismatch: inferred type is KClass<ZonedDateTimeSerializer> but KClass<out KSerializer<*>> was expected
如何在Kotlin中序列化ZoneDateTime
?以下是我所做的:
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)
}
}
对象kZoneDateTimeSerializer:KSerializer{
重写val描述符:SerialDescriptor=PrimitiveSerialDescriptor(“ZoneDateTime”,PrimitiveKind.STRING)
重写有趣的序列化(编码器:编码器,值:ZoneDateTime){
encoder.encodeString(value.toString())
}
重写有趣的反序列化(解码器:解码器):ZoneDateTime{
val string=decoder.decodeString()
返回ZonedDateTime.parse(字符串)
}
}
这是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)
}
}
对象KOffsetDateTimeSerializer:KSerializer{
重写val描述符:SerialDescriptor=PrimitiveSerialDescriptor(“OffsetDateTime”,PrimitiveKind.STRING)
重写有趣的序列化(编码器:编码器,值:OffsetDateTime){
val格式=DateTimeFormatter.ISO_OFFSET_DATE_TIME
val string=format.format(值)
编码器。编码器字符串(字符串)
}
重写有趣的反序列化(解码器:解码器):OffsetDateTime{
val string=decoder.decodeString()
return OffsetDateTime.parse(字符串)
}
}
ZonedDateTimeSerializer是否实现了
KSerializer
?不。这是一个Jackson类。当然,它不起作用。另请参见最近发布的org.jetbrains.kotlinx:kotlinx datetime:0.2.0,它支持kotlinx.serialization
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)
}
}