Как разобрать поле двумя способами с Моши - PullRequest
1 голос
/ 19 апреля 2019

Мне нужно проанализировать объект, который содержит свойство «триггеры», которое является List<Trigger>. Этот список может содержать три типа триггеров: Пользовательский и Событие. Вот мои триггерные классы:

  @JsonClass(generateAdapter = true)
    open class Trigger(open val type: String,
                       open val source: String,
                       open val tags: Properties? = mutableMapOf())

  @JsonClass(generateAdapter = true)
    data class CustomTrigger(override val type: String,
                             override val source: String,
                             override val tags: Properties?,
    //some other fields
    ) : Trigger(type, source, tags)

@JsonClass(generateAdapter = true)
data class EventTrigger(override val type: String,
                         override val source: String,
                         override val tags: Properties?,
    //some other fields
) : Trigger(type, source, tags)

Мой объект, который я получаю от сервера, выглядит так:

@JsonClass(generateAdapter = true)
data class Rule(val id: String,
                val triggers: MutableList<Trigger>,
//some other fields
)

Используя сгенерированный адаптер при разборе, я получаю триггеры только для полей класса Trigger. Мне нужно реализовать логику для анализа EventTrigger, если тип является «событием» или CustomTrigger, если тип «пользовательский».

Как я могу сделать это с Moshi? Нужно ли мне писать ручной анализатор для моего Rule объекта?

Любая идея приветствуется. Спасибо

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Этот пример из Moshi помог мне решить проблему синтаксического анализа: https://github.com/square/moshi#another-example

0 голосов
/ 19 апреля 2019

Взгляните на PolymorphicJsonAdapterFactory .

Moshi moshi = new Moshi.Builder() 
    .add(PolymorphicJsonAdapterFactory.of(HandOfCards.class, "hand_type")
        .withSubtype(BlackjackHand.class, "blackjack")
        .withSubtype(HoldemHand.class, "holdem")) 
    .build(); 

Обратите внимание, что для него требуется дополнительная moshi-adapters зависимость.

...