для филда, у которого могут быть разные типы - Name, NodeAbstract.Expr или Stmt.Class
companion object Adapter {
@ToJson
fun toJson(name: ClassName): Any = when (name) {
is Named -> name.name
is Expr -> name.expr
is Anonymous -> name.expr
}
@FromJson
fun fromJson(
reader: JsonReader,
nodeAdapter: JsonAdapter<NodeAbstract>
): ClassName = when (val node = nodeAdapter.fromJson(reader)) {
is Name -> Named(node)
is Stmt.Class -> Anonymous(node)
is NodeAbstract.Expr -> Expr(node)
else -> throw JsonDataException("Unexpected node $node")
}
}
У Jackson тоже есть конверторы, если это sealed, то скорее всего стандартный модуль поддержки котлин с этим справится
Обсуждают сегодня