最近,我一直试图为多态类层次结构实现Kotlinx序列化。我使用了这指南,但是我的例子有点复杂。我的班级结构如下:
@Serializable
open class Project(val name: String)
@Serializable
@SerialName("owned")
open class OwnedProject(val owner: String) : Project("kotlin")
@Serializable
@SerialName("owned_owned")
class OwnedOwnedProject(val ownerOwner: String) : OwnedProject("kotlinx.coroutines")并试图使用以下代码反序列化OwnedOwnedProject实例:
val module = SerializersModule {
polymorphic(Project::class) {
polymorphic(OwnedProject::class) {
subclass(OwnedOwnedProject::class)
}
}
}
val format = Json { serializersModule = module }
fun main() {
val str = "{\"type\":\"owned_owned\",\"name\":\"kotlin\",\"owner\":\"kotlinx.coroutines\",\"ownerOwner\":\"kotlinx.coroutines.launch\"}"
val obj = format.decodeFromString(PolymorphicSerializer(Project::class), str)
println(obj)
}然而,无论我尝试了SerializersModule定义的任何组合,它总是以kotlinx.serialization.json.internal.JsonDecodingException: Polymorphic serializer was not found for class discriminator 'owned_owned'错误告终。
请给我一个提示:如何为给定的类结构(比两个更深)实现SerializersModule?我是不是遗漏了什么?
发布于 2022-07-18 10:35:59
您似乎也需要直接在OwnedOwnedProject下注册Project,所以序列化程序知道它是一个可能的子类:
val module = SerializersModule {
polymorphic(Project::class) {
subclass(OwnedOwnedProject::class)
}
polymorphic(OwnedProject::class) {
subclass(OwnedOwnedProject::class)
}
}https://stackoverflow.com/questions/73017128
复制相似问题