spray-json полагается на присутствие в области видимости, неявный JsonWriter[T]
при вызове toJson
по экземпляру T
.spray-json: Сериализовать общий признак
Скажем, у меня есть черта с несколькими конкретными подтипов, каждый из которых имеет JsonWriter:
trait Base
case class Foo(a: Int) extends Base
case class Bar(a: Int, b: Int) extends Base
implicit val FooFormat = jsonFormat1(Foo)
implicit val BarFormat = jsonFormat2(Bar)
def go(o: Base) = {
o.toJson
}
go
не компилируется, потому что нет JsonWriter для базы, хотя являются писатели для всех конкретные подтипы.
Как я могу реорганизовать этот код так, чтобы общие функции Base
использовали соответствующие json-форматиры?
Оберните свои импликации в объект и импортируйте в область 'go'. У вас может быть проблема с самим признаком, но эти импликации не будут доступны для 'go', если вы не импортируете его. – Ayubinator
Извините, если мой фрагмент был неясен - мой вопрос заключается в том, как написать функцию на базе, которая использует конкретный конкретный неявный, предполагая, что набор этих имплицитов должным образом находится в области, где это должно быть. Как бы то ни было, я знаю, как писать 'go', если его аргумент равен' (o: Foo) ', но не' (o: Base) '. – ChrisB