我具有以下结构:
sealed trait BooleanExpression extends Serializable {
def value: Boolean
}
case object True extends BooleanExpression with Serializable {
val value: Boolean = true
}
case object False extends BooleanExpression with Serializable {
val value: Boolean = false
}
case class Not(e: BooleanExpression) extends BooleanExpression with Serializable {
val value = !e.value
}
我想在 Json4s自定义序列化器(我的实现)的帮助下序列化非类:
object NotSerializer extends CustomSerializer[Not](format => ( {
//deserialize
case JObject(
JField("e", null) ::
Nil
) => Not(null)
}, {
//serialize
case not: Not => JObject(
JField("not", JBool(not.e.value))
)
}))
主类如下:
object Main extends App {
implicit val formats: Formats = Serialization.formats(NoTypeHints) + NotSerializer
val not = Not(Not(Not(False)))
println(writePretty(not))
}
该类的序列化如下:
{
"not" : true
}
我希望看到的是:
{
"not" : {
"not" : {
"not" : {true}
}
}
}
找不到错误。我究竟做错了什么?
我们将不胜感激。
我已经更新了NotSerializer
课程-case bE:BooleanExpression
部分。
答案 0 :(得分:0)
您需要序列化包含的表达式,而不是序列化值。因此,请勿创建JBool
-而是调用Extraction.decompose
-不要调用.value
,因为那样会计算布尔表达式。