我有一个类似于 expressions语法的类型层次结构(为简洁起见,使用Kotlin数据类,但我也同意Java解决方案):
sealed class Expression
object Pi : Expression()
data class Literal(val value: Double) : Expression()
data class Plus(val left: Expression, val right: Expression) : Expression()
data class Multiply(val left: Expression, val right: Expression) : Expression()
已经定义了此语法的JSON序列化,我想使用Jackson进行读写。大多数类型都有带标签的多态表示形式,但是,Pi
应该序列化为文字字符串"pi"
,而文本应该序列化为双精度值,例如,
Plus(Literal(2.5), Multiply(Literal(1.0), Pi))
应另存为
{
"op": "+",
"left": 2.5,
"right": {
"op": "*",
"left": 1.0,
"right": "pi"
}
}
如您所见,大多数类使用普通的多态序列化并将"op"
作为类型标记,但是Literal
和Pi
例外。
有什么方法可以针对这种序列化方案配置Jackson吗?我想尽可能地依赖默认的bean序列化(Plus
和Multiply
个案例),因为实际上,应该以这种方式序列化更多的类。