Несоответствие типа во время Gson десериализации ответа json с помощью kotlin

#kotlin #gson

#kotlin #gson

Вопрос:

Я пытаюсь сериализовать приведенный ниже ответ 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 . Как я могу переписать выражение сериализатора, чтобы преобразовать его в список?

Комментарии:

1. какова ваша трассировка стека?

2. Несоответствие типов. Требуется: Список<ExploreItem> Найдено:ExploreItem! это ошибка, которую показывает строка сериализатора

Ответ №1:

Из вашей ошибки

Несоответствие типов. Требуется: найден список:ExploreItem!

Ошибки Post очень важны, Gson сообщает вам, что ему нужен список, а не объект ExploreItem .

Другими словами, вы сообщаете Gson с помощью вызова Serializer.defaultJsonParser.fromJson(response.body!!.string(),ExploreItem::class.java )

«Эй, Gson, из строки мне нужен объект ExploreItem «, и Gson говорит вам: «Эй, мой друг, твоя строка начинается с [ ] того, что это наверняка список чего-то, а не один объект».

Вам нужно передать Serializer.defaultJsonParser.fromJson(response.body!!.string(),List<ExploreItem>::class.java)

P.s: я не уверен в синтаксисе Kotlin