OWrites
предназначен для сериализации JsObject
специфически, в отличие от Writes
, который работает для всех JsValue
с , Осуществлению можно найти здесь:
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
.
Вы действительно понимаете, что означает 'OWrites'? Это специализированная версия 'Writes', которую вы должны использовать, когда вы уверены, что получите' JsObject', а не 'JsValue', который может быть чем угодно. Для списков естественно хранить как 'JsArray', а не' JsObject'. –
Да, действительно, мне это не нужно - спасибо. Надеюсь, этот вопрос не будет больше downvotes ..:/ – ticofab
Для записи, это был не я, который отказался от этого. Я думаю, что это совершенно правильный вопрос. –