Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用kotlinx序列化来序列化密封类的正确方法_Kotlin_Kotlinx.serialization - Fatal编程技术网

使用kotlinx序列化来序列化密封类的正确方法

使用kotlinx序列化来序列化密封类的正确方法,kotlin,kotlinx.serialization,Kotlin,Kotlinx.serialization,我不确定这是否可行,但我想序列化下面的类 @Serializable sealed class RestResponseDTO<out T : Any>{ @Serializable @SerialName("Success") class Success<out T : Any>(val value: T) : RestResponseDTO<T>() @Serializable @SerialN

我不确定这是否可行,但我想序列化下面的类

@Serializable
sealed class RestResponseDTO<out T : Any>{
    @Serializable
    @SerialName("Success")
    class Success<out T : Any>(val value: T) : RestResponseDTO<T>()

    @Serializable
    @SerialName("Failure")
    class Error(val message: String) : RestResponseDTO<String>()
}
我得到这个错误:

kotlinx.serialization.SerializationException:类的序列化程序 未找到“成功”。将类标记为@Serializable或提供 显式序列化程序

路由的get部分中提到的repo返回BookDTO的列表

@Serializable
data class BookDTO(
    override val id: Int,
    override val dateCreated: Long,
    override val dateUpdated: Long,
    val title: String,
    val isbn: String,
    val description: String,
    val publisher:DTOMin,
    val authors:List<DTOMin>
):DTO {
    override fun getDisplay() = title
    companion object {
        val restStub = "/books"
    }
}
@Serializable
数据类BookDTO(
覆盖值id:Int,
覆盖val DATECEATED:长,
覆盖val日期更新:长,
val标题:字符串,
val isbn:String,
val说明:字符串,
瓦尔出版社:DTOMin,
val作者:列表
):DTO{
覆盖getDisplay()=标题
伴星{
val restStub=“/books”
}
}

这个问题并不是一个破坏交易的问题,但在我的ktor客户端上使用详尽的解决方案会很好。

序列化密封类就可以了。阻碍您的是泛型类型参数

您可能想删除这些,只需使用
value:DTO
。接下来,确保在
SerializersModule
中为多态序列化注册了
DTO
的所有子类型

@Serializable
data class BookDTO(
    override val id: Int,
    override val dateCreated: Long,
    override val dateUpdated: Long,
    val title: String,
    val isbn: String,
    val description: String,
    val publisher:DTOMin,
    val authors:List<DTOMin>
):DTO {
    override fun getDisplay() = title
    companion object {
        val restStub = "/books"
    }
}