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 序列化...如果您知道更简单的方法,请告诉我。