Json 具有数据类的Kotlin Gson

Json 具有数据类的Kotlin Gson,json,kotlin,gson,data-class,Json,Kotlin,Gson,Data Class,尝试使用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,

尝试使用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()
}
数据类顾问(
学生:名单?,
)
密封班学生{
数据类BusinessMajor(val名称:字符串,val项目:列表):Student()
数据类ArtsMajor(val名称:String,val项:List):Student()
}
在运行时,我得到以下异常:

java.lang.RuntimeException:调用私有 com.mysite.myapp.ApiResponse$Student(),不带参数

我读过,这可以通过解析抽象类来创建,但我读过的所有文章都是针对Java的。我看不到对Kotlin数据类有任何帮助,尤其是用
密封的
类包装


感谢您的帮助。谢谢。

无法实例化密封类型类:

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

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


它的工作原理应该与Java中的相同。将示例改编为:

但是:

  • 这样,您需要为每个密封类编写一个工厂。也许有一个帮助程序库可以避免这个问题,但如果是这样,我还没有找到它

  • 另见


  • 总体上,我强烈考虑使用MOSHI或另一个KOTLIN感知JSON库。

    请显示失败的代码。那么,什么是正确的模型?
    val rta = RuntimeTypeAdapterFactory.of(Student::class.java)
        .registerSubtype(Student.BusinessMajor::class.java)
        .registerSubtype(Student.ArtsMajor::class.java)
    val gson = new GsonBuilder()
        .registerTypeAdapterFactory(rta)
        .create()