Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
序列化Kotlin数据类中的ZoneDateTime_Datetime_Kotlin_Jackson - Fatal编程技术网

序列化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)
    }
}