【发布时间】:2019-04-26 20:57:03
【问题描述】:
我有以下结构:
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 自定义序列化器(我的实现)的帮助下序列化 Not 类:
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}
}
}
}
找不到错误。我究竟做错了什么?
非常感谢您的帮助。
我已更新NotSerializerclass - case bE:BooleanExpression 部分。
【问题讨论】:
-
您的代码没有意义。您不是在序列化布尔值,而是在序列化布尔表达式。所以你不应该把它转换成布尔值。您确定这是您的代码的最新版本吗?
-
@RobinGreen 是的,你是对的。我已经上传了我的代码的最新版本。删除了转换为布尔值,但现在我得到了另一个输出。我已经更新了问题
标签: json scala serialization json4s