сериализация класса данных в JSON всегда приводит к нулю - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь сериализовать действительно простой класс данных Kotlin в json, используя библиотеку gson.Есть большая вероятность, что есть какая-то простая ошибка пользователя, которую я пропускаю, но я не могу сказать, что это.Я искал вокруг, и мой фрагмент, кажется, соответствует примерам.Что я делаю неправильно?Любая помощь будет принята с благодарностью.

import com.google.gson.*
import com.google.gson.annotations.SerializedName

fun main(args : Array<String>) {
    var gson = Gson()

    data class Msg(
        @SerializedName("body") val body: String = "",
        @SerializedName("keywords") val kwords: Array<String?>,
        @SerializedName("ner") val ner: Array<String?>)


    val msg = Msg("Test Body",arrayOf("key1","Key2"), arrayOf("ner1", "ner2"))


    val json = gson.toJson(msg)
    println(json)

}

1 Ответ

0 голосов
/ 18 февраля 2019

Я переписал вам пример, извлекающий класс данных Msg из функции main и ... он работает: это ограничение библиотеки GSON, как сообщается здесь .Если я не пойму неправильно, причина этого выбора заключается в том, что внутренние классы должны содержать ссылку на внешний объект, и это усложняет управление внутренними классами.

Однако Gson не может автоматически десериализоватьчисто внутренние классы, поскольку их конструктор без аргументов также нуждается в ссылке на содержащий объект, который недоступен во время десериализации.Вы можете решить эту проблему, либо сделав статический внутренний класс, либо предоставив для него собственный InstanceCreator.Вот пример:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...