Как откатиться на перечисление, если значения не совпадают в Моши

У меня есть класс enum, и я бы хотел, чтобы он возвращался к конкретному значению enum, если значения не соответствуют ни одному из них. Я обнаружил проблему с Moshi, в которой говорится об использовании EnumJsonAdapter, но я не вижу ни одного открытого класса для меня.

Я использую Moshi 1.8.0

Любые идеи о том, как этого добиться, или единственный путь - это создание собственного адаптера JSON?

2 ответа

Решение

Существует артефакт адаптеров для дополнительных адаптеров, таких как EnumJsonAdapter.

https://github.com/square/moshi/tree/master/adapters

Я создал этот универсальный объект для создания 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()
Другие вопросы по тегам