Десериализация объекта Kotlin с помощью GSON

У меня есть класс

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()} 

Родительский класс выглядит

 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 

Но после десериализации с ответом GSON поле null. дебаггер

Я также попытался поместить init init в init {}, но он все равно null, ленивым выдает исключение о вызове lazy.getValue в ссылке на нулевой объект

Как описано в этом ответе, Gson может без проблем обрабатывать сценарии конструктора no-args. Он делает это, используя UnsafeAllocator который в свою очередь использует UnsafeAllocator allocateInstanсe(Class p) . Это означает, что, когда нет конструктора no-args и нет созданного настраиваемого экземпляра, объект, созданный Gson будет иметь поля, инициализированные с объявленными типами значений по умолчанию .

Чтобы разрешить это, добавьте конструктор no-arg, т.е.

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

Или добавьте значения параметров по умолчанию в ваш основной конструктор, например:

 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() } 

Это странно, я просто использовал @SerializedName, как обычно, в Java с классом данных, и он работал:

 data class(@SerializedName("my_string_value") val myStringValue: String, @SerializedName("my_int_value") val myIntValue: Int) 
Intereting Posts
Преобразование байт-массива в строку в Kotlin Добавление Kotlin к существующим Java-проектам нарушает ошибки в сообщениях об ошибках Android Studio Как получить необязательный <String> из String? и Строка в Котлине не удалось настроить Kotlin Правильный способ получить свойства с конфигурацией Kotlin-script для Gradle Отражение Java-конструктора исключает исключение с помощью закрытых классов Spring Boot REST Service: десериализация JSON не работает как указать порядок плагина компилятора maven Вызов суперкласс класса в Котлин, Супер не является выражением Kotlin: какой формат использовать для документации? Как получить java.io.File из ресурса R.raw Как проверить ограничения на инициализацию объекта? Kotlin Foo :: class.java Ошибка неразрешенной ссылки: Java Почему Котлин нуждается в функциональном синтаксисе ссылки? Что такое открытое свойство? Почему я не могу сделать свой сеттер частным?