Play Framework Scala,OWrites [List [A]]?

时间:2016-03-28 12:04:53

标签: json scala playframework

当我有OWrites [A]时,如何获得OWrite [List [A]]?感觉应该很容易,但是我在摆弄,无法到达那里。

有一个OWrites.list [A]方法,但它返回一个Writes [List [A]] ..

1 个答案:

答案 0 :(得分:1)

OWrites专门用于序列化为JsObject,而不是Writes适用于所有JsValue的{​​{1}}。实施可以在这里找到:

https://github.com/playframework/playframework/blob/master/framework/src/play-json/src/main/scala/play/api/libs/json/Writes.scala

trait Writes[-A] {
  def writes(o: A): JsValue
  ...
}

trait OWrites[-A] extends Writes[A] {
  def writes(o: A): JsObject
  ...
}

背后的想法是告诉类型系统您的对象将被序列化为JsObject,而不是强制您向下转换的一般JsValue

List保留在JsObject中是不自然的,你必须在里面创建一个包含JsArray的字段,你可以这样做,创建一个自定义实例OWrites这就是为什么列表没有OWrites的原因。然而,显而易见的解决方案是仅使用Writes并将List存储在JsArray中。