Эта ошибка исходит из автоматического неявного макроса генерации в play.api.libs.json.JsMacroImpl.scala
(line 164 in Play 2.5.0-RC2).
Этот код не является разновидностью типов, прежде чем анализировать их, поэтому он не может сделать вывод, что TypeA.myTypeAlias
является Option
.
Одна вещь, которую вы можете сделать, это указать неявный Format[myTypeAlias]
:
object ClassA {
implicit val myTypeAliasFormat: Format[TypeA.myTypeAlias] = Format.optionWithNull
implicit def jsonFormat: Format[ClassA] = Json.format[ClassA]
}
или
object TypeA {
type myTypeAlias = Option[String]
implicit val myTypeAliasFormat: Format[myTypeAlias] = Format.optionWithNull
}
object ClassA {
import TypeA.myTypeAliasFormat
implicit def jsonFormat: Format[ClassA] = Json.format[ClassA]
}
Обратите внимание, что она будет преобразовывать JSON null
в None
, выход ошибка, если путь отсутствует, и сериализовать None
как JSON null
.
Я считаю, что невозможно использовать поведение для интерпретации недостающих путей как None
и пропускать сериализацию None
при использовании псевдонимов типов и автоматической неявной генерации с Json.format
. Вам нужно будет вручную написать JSON Format
, если вы хотите этого поведения.
Где вы на самом деле получаете ошибку компилятора? – Ryan