Как откатиться на перечисление, если значения не совпадают в Моши
У меня есть класс enum, и я бы хотел, чтобы он возвращался к конкретному значению enum, если значения не соответствуют ни одному из них. Я обнаружил проблему с Moshi, в которой говорится об использовании EnumJsonAdapter, но я не вижу ни одного открытого класса для меня.
Я использую Moshi 1.8.0
Любые идеи о том, как этого добиться, или единственный путь - это создание собственного адаптера JSON?
2 ответа
Решение
Существует артефакт адаптеров для дополнительных адаптеров, таких как EnumJsonAdapter.
Я создал этот универсальный объект для создания EnumJsonAdaprters:
object NullableEnumMoshiConverter {
fun <T : Enum<T>> create(enumType: Class<T>, defaultValue: T? = null): JsonAdapter<T> =
EnumJsonAdapter.create(enumType)
.withUnknownFallback(defaultValue)
.nullSafe()
}
Он также обрабатывает нулевые значения в JSON. Вы должны добавить его в метод построителя следующим образом:
Moshi.Builder().apply {
with(YourEnumClassName::class.java) {
add(this, NullableEnumMoshiConverter.create(this))
}
}.build()