0

我正在尝试使用 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)

}
4

1 回答 1

2

我重写了您将Msg数据类从main函数中提取出来的示例,并且...它起作用了:这是 GSON 库的限制,如此所述。如果我没有误解,这种选择背后的原因是内部类应该保持对外部对象的引用,这使内部类的管理变得复杂。

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

于 2019-02-18T14:16:49.470 回答