如何在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 响应

在 Kotlin/Native 中使用 kotlinx.serialization 进行多态反序列化

Kotlin Gson反序列化

gson 的多态性

与gson的多态性

如何使用 GSON 或 Java 中的其他 JSON 库反序列化列表?