Gson使用Kotlin反序列化json响应时类型不匹配

83qze16e  于 2022-11-06  发布在  Kotlin
关注(0)|答案(1)|浏览(220)

我正在尝试序列化下面的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列表。如何重写序列化器表达式以将其解析为列表呢?

wn9m85ua

wn9m85ua1#

从你的错误
类型不匹配。必需:找到列表:ExploreItem!
发布错误是非常重要的,Gson告诉你它想要一个List,而不是ExploreItem的对象。
换句话说,您将通过调用Serializer.defaultJsonParser.fromJson(response.body!!.string(),ExploreItem::class.java )告诉Gson
“嘿,Gson,从字符串中我想要一个对象ExploreItem“,Gson告诉你“嘿,我的朋友,你的字符串以[ ]开头,这肯定是一个列表,而不是一个单一的对象。”
您需要传入Serializer.defaultJsonParser.fromJson(response.body!!.string(),List<ExploreItem>::class.java)
附言:我不确定Kotlin语法

相关问题