当我有OWrites [A]时,如何获得OWrite [List [A]]?感觉应该很容易,但是我在摆弄,无法到达那里。
有一个OWrites.list [A]方法,但它返回一个Writes [List [A]] ..
答案 0 :(得分:1)
OWrites
专门用于序列化为JsObject
,而不是Writes
适用于所有JsValue
的{{1}}。实施可以在这里找到:
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
中。