我得到了
找不到类型T的Json序列化程序。尝试为此类型实现隐式写入或格式。
在
import play.api.libs.json._
trait A[T] {
def foo(t: T) = bar(Json.toJson(t))
}
对于实际的参数类型,我将有一个Writes
,但我没有看到这会清除编译错误。经过一些谷歌搜索,我觉得我对这个主题的理解可能会有一些基本的缺失。任何帮助表示赞赏。
答案 0 :(得分:2)
在这种情况下,错误信息不是很清楚 - 您不需要为此类型实现Writes
,您只需要向编译器证明您有一个:< / p>
import play.api.libs.json._
trait A[T] {
def foo(t: T)(implicit w: Writes[T]) = bar(Json.toJson(t))
}
这将按预期工作。你也可能在特征中有一个implicit def w: Writes[T]
,这需要实例化器提供一个实例,这更具限制性,因为你可以在没有实例的情况下实例化A
,但它实际上是&#39}如果你有很多像这样的方法,那么在语法上会更清洁一点,你可能真的希望限制能够提前开始,而不是在你已经实例A
并且你已经实例化之后。重新尝试拨打foo
。
答案 1 :(得分:0)
提供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))
}