1

我想为案例类创建隐式转换。这是我的域名:

case class WbProp(name:String,values:WbVal*)
sealed trait WbVal
case class WbLit(value:String) extends WbVal
case class WbRef(obj:String) extends WbVal

我想转换为 lift-json 对象,所以我有:

implicit def lit2json(r:WbLit) :JValue = ("@value"->r.value)
implicit def ref2json(r:WbRef) :JValue = ("@id"->r.obj)
implicit def prop2json(p:WbProp):JValue = JField(p.name,p.values) 

json-lift 可以将 Seq[A] 转换为 JArray,如果它具有从 A->JValue 的转换。但是,这不起作用 - 它无法从 WbVal 转换为 json,所以我必须添加:

implicit def val2json(v:WbVal) : JValue = v match {
  case l:WbLit => lit2json(l)
  case r:WbRef => ref2json(r)
}

我希望拥有一个密封的特征和所有成员的隐式转换就足够了。有没有更优雅的方法来做到这一点?

4

0 回答 0