Парсинг enum с EnumJsonAdapter не работает - PullRequest
0 голосов
/ 23 января 2019

У меня есть класс данных.строитель, но это не работает.

fun fromJson(json: String): User? {
      val builder = Moshi.Builder()
          .add(Title::class.java, EnumJsonAdapter.create<Title>(Title::class.java).withUnknownFallback(null))
          .add(Gender::class.java, EnumJsonAdapter.create<Gender>(Gender::class.java).withUnknownFallback(Gender.UNSPECIFIED))
          .build()
      val jsonAdapter = builder.adapter(User::class.java)

      return jsonAdapter.fromJson(json)
    }

    fun toJson(obj: User): String {
      val builder = Moshi.Builder()
          .add(Title::class.java, EnumJsonAdapter.create<Title>(Title::class.java).withUnknownFallback(null))
          .add(Gender::class.java, EnumJsonAdapter.create<Gender>(Gender::class.java).withUnknownFallback(Gender.UNSPECIFIED))
          .build()
      val jsonAdapter = builder.adapter(User::class.java).serializeNulls()

      return jsonAdapter.toJson(obj)
    }

Я получаю title = "Mr", и он анализируется как ноль.По полу я получаю это исключение:

com.squareup.moshi.JsonDataException: Expected a string but was NUMBER at path $.data.gender
        at com.squareup.moshi.adapters.EnumJsonAdapter.fromJson(EnumJsonAdapter.java:93)

Что-то не так с EnumJsonAdapter?Итак, что я вижу, его нельзя использовать для int, но почему он не работает нормально для заголовка, который является строкой?

Если я использую пользовательские адаптеры для этих перечислений, все работает нормально.

...