如何解决使用 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 举报,一经查实,本站将立刻删除。