spray 中只有 case 对象自定义实现的特征 json
trait with only case objects custom implementation in spray json
鉴于我有以下声明:
sealed trait Color
case object DColor extends Color
case object CColor extends Color
case object VColor extends Color
然后我使用它们 在案例中 class 像这样:
case class CustomColor(c: Color)
CustomColor(VColor)
现在我想让它产生一个 JSON 像这样:
{c:"v_color"}
应定义自定义格式:
object MyJsonProtocol extends DefaultJsonProtocol {
implicit object ColorJsonFormat extends RootJsonFormat[Color] {
def write(c: Color) = c match {
case VColor => JsString("v_color")
case _ => JsString("foo")
}
def read(value: JsValue) = ???
}
implicit val customColorFormat = jsonFormat1(CustomColor.apply)
}
然后
alex-alex@ import MyJsonProtocol._
alex-alex@ CustomColor(VColor).toJson
res18: JsValue = {"c":"v_color"}
鉴于我有以下声明:
sealed trait Color
case object DColor extends Color
case object CColor extends Color
case object VColor extends Color
然后我使用它们 在案例中 class 像这样:
case class CustomColor(c: Color)
CustomColor(VColor)
现在我想让它产生一个 JSON 像这样:
{c:"v_color"}
应定义自定义格式:
object MyJsonProtocol extends DefaultJsonProtocol {
implicit object ColorJsonFormat extends RootJsonFormat[Color] {
def write(c: Color) = c match {
case VColor => JsString("v_color")
case _ => JsString("foo")
}
def read(value: JsValue) = ???
}
implicit val customColorFormat = jsonFormat1(CustomColor.apply)
}
然后
alex-alex@ import MyJsonProtocol._
alex-alex@ CustomColor(VColor).toJson
res18: JsValue = {"c":"v_color"}