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