微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 kotlinx 序列化序列化密封类的正确方法

我不确定是否可行,但我想序列化以下类。

@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>()
}

当我尝试使用它时

route(buildroute(BookDTO.restStub)) {
    get {
        call.respond(RestResponseDTO.Success(BookRepo.getAll()))
    }
}

我收到此错误

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"
    }
}

这个问题不是一个交易破坏者,但在我的 ktor 客户端上使用详尽的会很棒。

解决方法

序列化密封类工作正常。阻碍您的是泛型类型参数。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。