将数据类序列化为json始终会导致null

时间:2019-02-18 13:52:36

标签: kotlin gson

我正在尝试使用gson库将一个非常简单的Kotlin数据类序列化为json。我很可能遗漏了一些死掉的简单用户错误,但就我的一生而言,我不知道这是什么。我搜索了一下,我的代码段似乎与示例匹配。我究竟做错了什么?任何帮助将不胜感激。

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 :(得分:2)

我重写了您从Msg函数中提取main数据类的示例,并且...它的工作原理:这是GSON库的一个局限,据报告here。如果我没有误会,那么做出此选择的原因是内部类应该保留对外部对象的引用,这会使内部类的管理变得复杂。

  

但是,Gson无法自动反序列化纯内部类,因为它们的no-args构造函数还需要引用包含对象,而该对象在反序列化时不可用。您可以通过使内部类静态化或为其提供自定义InstanceCreator来解决此问题。这是一个示例: