我得到
没有找到t类型的Json序列化器。尝试为该类型实现隐式的write或Format。
import play.api.libs.json._
trait A[T] {
def foo(t: T) = bar(Json.toJson(t))
}
我将为实际参数类型设置一个Writes
,但我不认为这会消除编译错误。在谷歌上搜索了一下之后,我觉得我对这个主题的理解可能缺少了一些基本的东西。任何帮助都是感激的。
在这种情况下,错误信息不是很清楚——你不需要为这种类型实现Writes
,你只需要向编译器证明你有一个:
import play.api.libs.json._
trait A[T] {
def foo(t: T)(implicit w: Writes[T]) = bar(Json.toJson(t))
}
这将按预期工作。你也可以在trait中有一个implicit def w: Writes[T]
,这将需要实例化器提供一个实例,这是更严格的,因为你不能在没有实例的情况下实例化A
,但是如果你有很多这样的方法,它在语法上更清晰,你可能实际上想要更早地启动限制,而不是在你已经实例化了A
并且你试图调用foo
之后。
提供implicit def writes
import play.api.libs.json._
trait A[T] {
implicit def writes: Writes[T]
def foo(t: T) = bar(Json.toJson(t))
}
或将implicit
参数写入foo
import play.api.libs.json._
trait A[T] {
def foo(t: T)(implicit writes: Writes[T]): JsValue = bar(Json.toJson(t))
}