【发布时间】:2015-11-18 11:55:26
【问题描述】:
我在为 Json4s 编写自定义序列化程序以处理以下情况时遇到问题。我有案例类:
trait Condition
case class BasicExpression (field:String, operator:String, value:String) extends Condition
case class BooleanExpression (val leftExpr: Condition, val logicalOperator:String,
val rightExpr: Condition) extends Condition
我希望能够读取 BasicExpression 和 BooleanExpression 的 JSON,例如:
var jsonStringBasic:String = """ {"field":"name","operator":"=","value":"adam"}""";
var jsonStringBoolean:String = """{"leftExpr":{"leftExpr":{"field":"field1", "operator":"=", "value":"value1"}, "logicalOperator":"AND", "rightExpr":{"field":"field2","operator":">","value":"500"}}, "logicalOperator":"AND", "rightExpr": {"field":"field3","operator":"<","value":"10000"}}""";
var jValueBasic:JValue = parse(jsonStringBasic, false);
var readCBasic = jValueBasic.extract[Condition];
我了解自定义序列化程序在读取BasicExpression 时的工作原理,我可以使用SimpleTypeHints,但最好不必为每个Condition 膨胀JSON。我也可以试试extract[BooleanExpression],如果失败,试试extract[BasicExpression],但这看起来很难看。是否可以编写自定义序列化程序来处理BooleanCondition 本身将递归包含另一个Condition 以便我可以extract[Condition] 的事实?
【问题讨论】: