首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin序列化:嵌套多态模块

Kotlin序列化:嵌套多态模块
EN

Stack Overflow用户
提问于 2022-07-18 03:50:36
回答 1查看 213关注 0票数 1

最近,我一直试图为多态类层次结构实现Kotlinx序列化。我使用了指南,但是我的例子有点复杂。我的班级结构如下:

代码语言:javascript
复制
@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实例:

代码语言:javascript
复制
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?我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-18 10:35:59

您似乎也需要直接在OwnedOwnedProject下注册Project,所以序列化程序知道它是一个可能的子类:

代码语言:javascript
复制
val module = SerializersModule {
    polymorphic(Project::class) {
        subclass(OwnedOwnedProject::class)
    }
    polymorphic(OwnedProject::class) {
        subclass(OwnedOwnedProject::class)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73017128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档