我需要解析一个包含属性“触发器”的对象,该属性为List<Trigger>
。此列表可以包含两种类型的触发器:“自定义”和“事件”。
这是我的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
对象写一个手动解析器吗?
任何想法都值得欢迎。谢谢
答案 0 :(得分:0)
看看PolymorphicJsonAdapterFactory。
Moshi moshi = new Moshi.Builder()
.add(PolymorphicJsonAdapterFactory.of(HandOfCards.class, "hand_type")
.withSubtype(BlackjackHand.class, "blackjack")
.withSubtype(HoldemHand.class, "holdem"))
.build();
请注意,它需要可选的moshi-adapters
依赖项。
答案 1 :(得分:0)
Moshi
中的此示例帮助我解决了解析问题:
https://github.com/square/moshi#another-example