Я должен десериализовать 0
до false
и 1
до true
.
Я создал этот класс:
class IntBooleanDeserializer : JsonDeserializer<Boolean?> {
override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): Boolean? {
json?.let {
return json.asInt == 1
}
return null
}
}
И зарегистрировал это:
private val gson = GsonBuilder()
.registerTypeAdapter(Boolean::class.java, IntBooleanDeserializer())
.create()
И создал для этого тестовый класс:
data class BooleanClass(val value: Boolean?)
А потом:
gson.fromJson("{\"value\": 0}", BooleanClass::class.java)
Этот код вызывает исключение:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a boolean but was NUMBER at line 1 column 12 path $.value
Похоже, что Gson не использует мой десериализатор для Boolean?
, но успешно использует другие пользовательские десериализаторы для других типов (например, для перечислений).
Почему?