【问题标题】:Type mismatch during Gson deserialize json response with kotlinGson 使用 kotlin 反序列化 json 响应期间的类型不匹配
【发布时间】:2021-01-18 11:14:25
【问题描述】:

我正在尝试序列化下面的 json 响应,但我不确定该怎么做。

这是我的后端返回的 Json:

[
  {
    "title": "Dummy section, should not be seen",
    "type": "dummy_test",
    "metadata": []
  },
    {
    "title": "Title1",
    "type": "categories_products",
    "metadata": [
      {
        "id": "1272"
      }
    ]
  },
  {
    "title": "Title2",
    "type": "categories_products",
    "metadata": [
      {
        "id": "996"
      }
    ]
  }
]

这是我的 ExploreItem 类:

data class ExploreItem(
    @SerializedName("metadata") val metadata: List<Metadata> = listOf(),
    @SerializedName("title") val title: String = "",
    @SerializedName("type") val type: String = ""
) {
    enum class ExploreItemType(val value: String) {
        @SerializedName("unknown")
        UNKNOWN("unknown"),

        @SerializedName("other_companies")
        OTHER_COMPANIES("other_companies"),

        @SerializedName("categories_products")
        CATEGORIES_PRODUCTS("categories_products"),

        @SerializedName("popular_categories")
        POPULAR_CATEGORIES("popular_categories")
    }
}

data class Metadata(
    @SerializedName("id") val id: String = ""
)

现在我正在尝试像这样在存储库中对其进行序列化:


Serializer.defaultJsonParser.fromJson(response.body!!.string(),ExploreItem::class.java )

但它不起作用,因为它需要一个 ExploreItem 列表。如何重写序列化器表达式以将其解析为列表?

【问题讨论】:

  • 你的堆栈跟踪是什么?
  • 类型不匹配。必需:列表 找到:ExploreItem!这就是序列化程序行显示的错误

标签: kotlin gson


【解决方案1】:

你的错误

类型不匹配。必需:找到的列表:ExploreItem!

发布错误非常重要,Gson 告诉你它想要一个 List 而不是 ExploreItem 的对象。

换句话说,你是通过电话Serializer.defaultJsonParser.fromJson(response.body!!.string(),ExploreItem::class.java )告诉Gson

“嘿 Gson,从字符串中我想要一个对象 ExploreItem”,而 Gson 告诉你“嘿,我的朋友,你的字符串以 [ ] 开头,这肯定是一个列表,而不是单个对象。 "

你需要传入Serializer.defaultJsonParser.fromJson(response.body!!.string(),List&lt;ExploreItem&gt;::class.java)

P.s:我不确定 Kotlin 语法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多