如何在Kotlin中用GSON实现多态列表反序列化?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Kotlin中用GSON实现多态列表反序列化?相关的知识,希望对你有一定的参考价值。
我有一个数据源,返回一个列表,可以是三种类型(说类型A,B和C)。上面的所有类型共享2个属性,其余属性特定于类型。我尝试使用该模式。
abstract class Parent (val type: String, val id: String)
和
data class TypeA(override val type: String ... )
data class TypeB(override val type: String ... )
我正在使用Retrofit并尝试将列表反序列化为
List<? extends Parent>
在Kotlin应该是
List<out Parent>
但是,GSON在实例化抽象的父类时抛出了反序列化错误。
java.lang.RuntimeException: Failed to invoke public com.XX.Parent() with no args
我有什么想法可以在Kotlin中实现这个?
答案
我认为你需要添加“extends”修饰符(Kotlin中的“:”)并将参数传递给Parent的构造函数,如下所示:
data class TypeA(override val type: String, val id: String) : Parent(type, id)
以上是关于如何在Kotlin中用GSON实现多态列表反序列化?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Gson @SerializedName 注释在 Kotlin 中反序列化嵌套的 Json API 响应