Kotlin序列化:未找到“UUID”类型的序列化程序

我正在使用 Kotlin 序列化来序列化包含 UUID 字段的自定义类型

@Serializable
data class MyDataClass {
    val field1: String,
    val field2: UUID
}

我收到以下错误,不知道该怎么做:

Serializer has not been found for type 'UUID'. To use context serializer as fallback, explicitly annotate type or property with @Contextual

回答

在遵循Kotlin 序列化指南的Kotlin 自定义序列化器部分之后,我意识到我必须编写一个看起来像这样的对象来实际帮助 UUID 序列化/反序列化,即使UUID已经实现java.io.Serializable

object UUIDSerializer : KSerializer<UUID> {
        override val descriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)

        override fun deserialize(decoder: Decoder): UUID {
                return UUID.fromString(decoder.decodeString())
        }

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

// And also update the original data class:
@Serializable
data class FaceIdentifier(
        val deviceId: String,
        @Serializable(with = UUIDSerializer::class)
        val imageUUID: UUID,
        val faceIndex: Int
)

好吧,事实证明我必须对很多类型执行此操作:例如 Rect、Uri,因此如果可能,我将使用 Java 序列化...如果您知道更简单的方法,请告诉我。


以上是Kotlin序列化:未找到“UUID”类型的序列化程序的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>