Deserialization de object Kotlin con GSON

Tengo una class

class ThreadComment( banned: Int, closed: Int, comment: String?, date: String?, email: String?, files: ArrayList<File>?, lasthit: Int, name: String?, num: String?, op: Int, parent: String?, postsCount: Int, sticky: Int, subject: String?, tags: String?, timestamp: Int, trip: String?) : Comment(banned, closed, comment, date, email, files, lasthit, name, num, op, parent, postsCount, sticky, subject, tags, timestamp, trip) { val answers: ArrayList<String> = ArrayList()} 

La class para padres parece

 open class Comment( @com.google.gson.annotations.SerializedName("banned") val banned: Int = 0, @com.google.gson.annotations.SerializedName("closed") val closed: Int = 0, @com.google.gson.annotations.SerializedName("comment") val comment: String? = null, @com.google.gson.annotations.SerializedName("date") val date: String? = null, @com.google.gson.annotations.SerializedName("email") val email: String? = null, @com.google.gson.annotations.SerializedName("files") val files: ArrayList<File>? = null, @com.google.gson.annotations.SerializedName("lasthit") val lasthit: Int = 0, @com.google.gson.annotations.SerializedName("name") val name: String? = null, @com.google.gson.annotations.SerializedName("num") val num: String? = null, @com.google.gson.annotations.SerializedName("op") val op: Int = 0, @com.google.gson.annotations.SerializedName("parent") val parent: String? = null, @com.google.gson.annotations.SerializedName("posts_count") val postsCount: Int = 0, @com.google.gson.annotations.SerializedName("sticky") val sticky: Int = 0, @com.google.gson.annotations.SerializedName("subject") val subject: String? = null, @com.google.gson.annotations.SerializedName("tags") val tags: String? = null, @com.google.gson.annotations.SerializedName("timestamp") val timestamp: Int = 0, @com.google.gson.annotations.SerializedName("trip") val trip: String? = null) : Serializable 

Pero después de la deserialization con GSON, el campo de respuestas es nulo. Depurador

También traté de poner initiation en init {}, pero sigue siendo nulo, por perezoso lanza una exception acerca de llamar a lazy.getValue en una reference de object nulo

Como se describe en esta respuesta, Gson puede manejar inseguramente escenarios de constructor sin arguments. Lo hace aprovechando UnsafeAllocator que a su vez usa allocateInstanсe(Class p) . Esto significa que cuando no hay un constructor sin args y no hay ningún creador de instancia personalizado registrado, el object creado por Gson tendrá los campos inicializados con sus valores pnetworkingeterminados de types declarados .

Para resolver eso, agregue un constructor no-arg, es decir,

 private constructor() : this(-1, -1, "", "", "", null, -1, "", "", -1, null, -1, -1, null, null, -1, null) 

O agregue los valores de los parameters pnetworkingeterminados a su constructor principal de la siguiente manera:

 class ThreadComment( banned: Int = -1, closed: Int = -1, comment: String? = null, date: String? = null, email: String? = null, files: ArrayList<File>? = null, lasthit: Int = -1, name: String? = null, num: String? = null, op: Int = -1, parent: String? = null, postsCount: Int = -1, sticky: Int = -1, subject: String? = null, tags: String? = null, timestamp: Int = -1, trip: String? = null ) : Comment(banned, closed, comment, date, email, files, lasthit, name, num, op, parent, postsCount, sticky, subject, tags, timestamp, trip) { val answers: ArrayList<String> = ArrayList() } 

Es extraño, acabo de utilizar @SerializedName normalmente como en Java con una class de datos y funcionó:

 data class(@SerializedName("my_string_value") val myStringValue: String, @SerializedName("my_int_value") val myIntValue: Int) 
  • Acceso directo a las classs de Visibilidad interna de Kotlin
  • Cómo el aceptador puede agregar valor al estado y devolverlo al iniciador
  • Anotaciones: cuando es arrayOf necesario
  • ¿No se puede agregar el conector mysql en build.gradle para un proyecto de kotlin?
  • En Kotlin, cómo pasar un fragment a FragmentManager.replace correctamente
  • ClassNotFoundException en comstackciones posteriores después de convertir MainActivity a Kotlin
  • Kotlin: ¿Cómo hacer el menu de la barra de herramientas con Anko DSL?
  • Escriba un problema de interferencia con WebFlux WebTestClient y Kotlin
  • Kotlin: generics, reflexión y la diferencia entre tipo T y T: cualquier
  • ¿Cómo se configuran las properties extras de Gradle en el Kotlin DSL?
  • FusedLocationProviderClient con el service Android Kotlin