spray-json:序列化一般特征

Chr*_*isB 4 scala implicit traits spray-json

JsonWriter[T]当调用toJson一个实例时,spray-json依赖于一个范围内的隐式存在T.

假设我有一个具有几个具体子类型的特征,每个子类型都有一个JsonWriter:

trait Base
case class Foo(a: Int) extends Base
case class Bar(a: Int, b: Int) extends Base
implicit val FooFormat = jsonFormat1(Foo)
implicit val BarFormat = jsonFormat2(Bar)

def go(o: Base) = {
    o.toJson
}
Run Code Online (Sandbox Code Playgroud)

go不编译,因为有一个为基地没有JsonWriter,即使对所有具体的子类型的作家.

如何重新组织此代码,以便Base使用适当的json格式化程序的通用函数?

Woj*_*zyk 5

您可以使用带有类型和上下文边界的泛型方法.像这样:

def go[T <: Base : JsonWriter](t: T) = t.toJson
Run Code Online (Sandbox Code Playgroud)