首页 > 解决方案 > 使用 GSON 转换的 Kotlin 数据类始终返回 null

问题描述

我尝试使用 GSON 作为 JSON 字符串存储数据类。但是,gson 总是返回 null:

fun jsonTest() {
    data class ImageEntry(
        val id: Int,
        val type: String,
        val path: String)

    val images = mutableListOf<ImageEntry>()
    images.add(ImageEntry(0, "test", "test"))
    Log.d("EXPORT_TEST", "$images")

    val gson = Gson()
    val jsonString = gson.toJson(images)
    Log.d("EXPORT_TEST", jsonString)
}

这返回

D/EXPORT_TEST: [ImageEntry(id=0, type=test, path=test)]
D/EXPORT_TEST: [null]

我尝试@SerializedName从这里使用(Kotlin Data Class from Json using GSON)但结果相同。

gson 2.8.7 科特林 1.5.10

我究竟做错了什么?

标签: androidkotlingson

解决方案


我不确定这里真正的“根本”原因,但发生这种情况是因为您的ImageEntry类定义是jsonTest()函数本地的。将类定义移到函数之外:

data class ImageEntry(
    val id: Int,
    val type: String,
    val path: String
)

fun jsonTest() {
    val images = mutableListOf<ImageEntry>()
    images.add(ImageEntry(0, "test", "test"))
    Log.d("EXPORT_TEST", "$images")

    val gson = Gson()
    val jsonString = gson.toJson(images)
    Log.d("EXPORT_TEST", jsonString)
}

当我运行它时,输出按预期显示:

D/EXPORT_TEST: [{"id":0,"type":"test","path":"test"}]

推荐阅读