Gson使用kotlin反序列化json响应期间的类型不匹配

Gson使用kotlin反序列化json响应期间的类型不匹配,kotlin,gson,Kotlin,Gson,我正在尝试序列化下面的json响应,但我不确定如何做 这是我的后端返回的Json: [ { "title": "Dummy section, should not be seen", "type": "dummy_test", "metadata": [] }, { "title": "Title1",

我正在尝试序列化下面的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 = ""
)

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

来自您的错误

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

Post错误非常重要,Gson告诉您它需要的是一个列表,而不是
ExploreItem
的对象

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

“嘿,Gson,从字符串我想要一个对象
ExploreItem
”,Gson告诉你“嘿,我的朋友,你的字符串从
[]
开始,确定它是一个列表,而不是一个对象。”

您需要传入
Serializer.defaultJsonParser.fromJson(response.body!!.string(),List::class.java)

附言:我不确定Kotlin的语法是否与您的错误相符

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

Post错误非常重要,Gson告诉您它需要的是一个列表,而不是
ExploreItem
的对象

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

“嘿,Gson,从字符串我想要一个对象
ExploreItem
”,Gson告诉你“嘿,我的朋友,你的字符串从
[]
开始,确定它是一个列表,而不是一个对象。”

您需要传入
Serializer.defaultJsonParser.fromJson(response.body!!.string(),List::class.java)


注意:我不确定Kotlin语法是什么

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

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