1

我明白了

找不到类型 T 的 Json 序列化程序。尝试为此类型实现隐式写入或格式。

import play.api.libs.json._

trait A[T] {
  def foo(t: T) = bar(Json.toJson(t))
}

我将有一个Writes实际参数类型,但我认为这不会清除编译错误。经过一番谷歌搜索后,我觉得我对这个主题的理解可能缺少一些基本的东西。任何帮助表示赞赏。

4

2 回答 2

2

在这种情况下,错误消息不是很清楚——你不需要Writes为这种类型实现 a,你只需要向编译器证明你有一个:

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] in 特征,这将需要实例化器提供一个实例,这更具限制性,因为你不能在没有实例的A情况下实例化一个,但如果你有很多这样的方法,它在语法上会更简洁一些,并且您实际上可能希望限制更早生效,而不是在您已经A实例化并且您尝试调用foo它之后。

于 2016-10-14T17:49:18.437 回答
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))
}
于 2016-10-14T17:49:23.577 回答