Как сериализовать вложенный класс с помощью kotlinx.serialization

Мне нужно получить свойство breadType из класса Sandwich. У меня есть 2 сериализуемых класса:

@Serializable
class MyFood {
    var name: String? = null
    var price: Int? = null
    var sand: Sandwich? = null
}

@Serializable
class Sandwich{
    var breadType: String? = null
}

И этот JSON:

"MyFood": {
    "name": "Sandwich double",
    "price": 100.00,
    "breadType": 100.00
 }

Я получаю исключение JsonUnknownKeyException:

"Strict JSON encountered unknown key: breadType\nYou can disable strict mode to skip unknown keys"

Что я делаю не так пожалуйста!?

1 ответ

Если вы используете дооснащение:

Используйте JsonConfiguration(strictMode = false) для модернизации фабрики преобразователей.

// your retrofit builder
.addConverterFactory(
    Json(
        JsonConfiguration(strictMode = false)
    ).asConverterFactory(MediaType.get("application/json"))
)

Другими словами, вы должны использовать Json.nonstrict.parse() вместо того Json.parse()

Или мы можем передать конструктор:

serializer = KotlinxSerializer(Json.nonstrict)

Отредактировано:

В соответствии с вашим json ваш класс должен быть таким:

Serializable
class MyFood {
    var name: String? = null
    var price: Int? = null
    var breadType: double? = null
}

Это будет работать, но если вы хотите использовать класс Sandwich, ваш json должен быть таким:

"MyFood": { 
"name": "Sandwich double",
 "price": 100.00, 
"sand": {
"breadType":100.00
}
}
Другие вопросы по тегам