首先,我会发布代码
@OptIn(ExperimentalSerializationApi::class)
@Serializer(forClass = UUID::class)
object UUIDserializer : KSerializer<UUID> {
override fun deserialize(decoder: Decoder): UUID = UUID.fromString(decoder.decodeString())
override val descriptor: SerialDescriptor
get() = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: UUID) {
encoder.encodeString(value.toString())
}
}
typealias SID = @Serializable(with = UUIDserializer::class) UUID
fun randomSid() = UUID.randomUUID() as SID
@Serializable
data class Example(val id:SID = randomSid())
class SerializeId {
@Test
fun nestedTypeUsage() {
val example = Example()
val string = Json.encodeToString(example)
println(string)
}
@Test
fun directTypeUsage () {
val hi = randomSid()
val string = Json.encodeToString(hi)
println(string)
}
}nestedTypeUsage运行并传递,但directTypeUsage失败。
未找到类“UUID”的
序列化程序。将类标记为@Serializable或显式提供序列化程序。kotlinx.serialization.SerializationException:找不到类'UUID‘的序列化程序
我无法将@Serializable注释直接应用于val或函数参数。
发布于 2022-11-06 00:24:17
几乎是在发布这篇文章之后。我意识到我可以
@Test
fun directTypeUsage () {
val hi = randomSid()
val string = hi.toString()
println(string)
}https://stackoverflow.com/questions/74332372
复制相似问题