Scala 如何使用Play Json为泛型类型定义隐式反序列化器

Scala 如何使用Play Json为泛型类型定义隐式反序列化器,scala,playframework,play-json,Scala,Playframework,Play Json,我有一个接受T的方法,我想做Json.parse(someString).as[T] 现在,我传入的T类定义了隐式格式,例如隐式lazy val format:format[Foo]=…。但是,我希望能够告诉编译器在运行时查找隐式格式,而不是抱怨“没有为T类型找到Json反序列化程序”。正确的方法是在T上添加一个: def yourMethod[T: Reads](...) = ... 它不会在运行时寻找隐式(Scala无法做到这一点),但如果在作用域中没有类似format的隐式方法,它不会让

我有一个接受T的方法,我想做
Json.parse(someString).as[T]


现在,我传入的T类定义了隐式格式,例如
隐式lazy val format:format[Foo]=…
。但是,我希望能够告诉编译器在运行时查找隐式格式,而不是抱怨“没有为T类型找到Json反序列化程序”。正确的方法是在
T
上添加一个:

def yourMethod[T: Reads](...) = ...
它不会在运行时寻找隐式(Scala无法做到这一点),但如果在作用域中没有类似
format
的隐式方法,它不会让您调用该方法。当存在时,它将把它传递给
as
和任何其他需要它的方法


如果您的方法既需要序列化,也需要序列化,则需要两个边界:
T:Reads:Writes
或just
T:Format

正确的方法是在
T
上添加一个:

def yourMethod[T: Reads](...) = ...
它不会在运行时寻找隐式(Scala无法做到这一点),但如果在作用域中没有类似
format
的隐式方法,它不会让您调用该方法。当存在时,它将把它传递给
as
和任何其他需要它的方法


如果您的方法既需要序列化也需要序列化,那么您将需要两个边界:
T:Reads:Writes
或只是
T:Format

谢谢。我还必须添加一个TypeTag上下文绑定,以便仅在我的案例中处理一些特殊的类型,但是答案非常有效。谢谢。我还必须添加一个TypeTag上下文,以便仅在我的案例中处理一些特殊的类型,但答案非常有效。