Kotlin Gson的数据类



尝试使用Gson解析复杂的json对象。以下是失败的数据类:

data class Advisor(
val students: List<Student>?,
)
sealed class Student {
data class BusinessMajor(val name: String, val items: List<Courses>) : Student()
data class ArtsMajor(val name: String, val items: List<Courses>) : Student()
}

在运行时,我得到这个异常:

java.lang.RuntimeException:调用private失败com.mysite.myapp.ApiResponse$Student((,不带args

我读到这可以通过解析抽象类来创建,但我读到的所有帖子都是针对Java的。我看不到任何有助于Kotlin数据类的东西,特别是用sealed类包装的。

感谢您的帮助。谢谢

密封类型类无法实例化:请参阅此处

密封类本身是抽象的,不能直接实例化,可以有抽象成员。

密封类不允许有非私有构造函数(默认情况下,它们的构造函数是私有的(。

它应该与Java中的工作方式相同。根据https://stackoverflow.com/a/21641225/9204:

val rta = RuntimeTypeAdapterFactory.of(Student::class.java)
.registerSubtype(Student.BusinessMajor::class.java)
.registerSubtype(Student.ArtsMajor::class.java)
val gson = new GsonBuilder()
.registerTypeAdapterFactory(rta)
.create()

但是:

  1. 通过这种方式,您需要为每个密封类编写一个工厂。也许有一个帮助库可以避免这个问题,但如果是这样的话,我还没有找到它

  2. 另请参阅为什么Kotlin数据类可以使用Gson在不可为null的字段中具有null?

总的来说,我强烈考虑使用Moshi或其他支持Kotlin的JSON库。

最新更新