Json 具有数据类的Kotlin Gson
尝试使用Gson解析复杂的json对象。以下是失败的数据类: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,
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()