#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