如何在scala和play框架中从格式创建格式

如何在scala和play框架中从格式创建格式,scala,playframework,Scala,Playframework,如何用我用Json.Format[T]创建case类的同样简单的方法创建OFormat[T]?这是我发现的(非常)简单的解决方案: 创建辅助对象: import play.api.libs.json.{Format, OFormat, JsObject, JsValue, JsResult} object JsonUtil { def oFormat[T](format:Format[T]) : OFormat[T] = { val oFormat: OFormat[T] = n

如何用我用
Json.Format[T]
创建case类的同样简单的方法创建OFormat[T]?

这是我发现的(非常)简单的解决方案: 创建辅助对象:

import play.api.libs.json.{Format, OFormat, JsObject, JsValue, JsResult}

object JsonUtil {

  def oFormat[T](format:Format[T]) : OFormat[T] = {
    val oFormat: OFormat[T] = new OFormat[T](){
      override def writes(o: T): JsObject = format.writes(o).as[JsObject]
      override def reads(json: JsValue): JsResult[T] = format.reads(json)
    }
    oFormat
  }
}
然后像这样使用它:

import play.modules.reactivemongo.json._
implicit val formatFileToSave : Format[FileToSaveData]  = Json.format[FileToSaveData]
implicit val oFormatFileToSave: OFormat[FileToSaveData] = JsonUtil.oFormat(formatFileToSave)
我希望显式地传递“格式”,但当我尝试运行以下命令时

def of format[T]()(隐式格式:format[T])
我得到了
java.lang.RuntimeException

如果有人能解释为什么或者如何在没有运行时异常的情况下使用“implicit”,我很乐意听到


我正在运行Java 8、play 2.4.0和scala 2.11.7(显然,
FileToSaveData
是我想要序列化的case类)

在play 2.5.x中,
Json.format[A]
确实返回了一个
格式[A]
。我不知道为什么需要这么多版本,因为宏只用于对象。