使用spray-json时,我需要为要序列化JsonFormat[A]
的每个域类型引入一个隐式范围。A
推荐的方法是创建一个自定义对象,将所有隐式作为字段:
object MyJsonProtocol extends DefaultJsonProtocol {
implicit val colorFormat = jsonFormat4(Color)
}
import MyJsonProtocol._
我的应用程序有很多域类型,其中一些有很长的名称。我MyJsonProtocol
的变得冗长且难以阅读:
object MyJsonProtocol extends DefaultJsonProtocol {
... // many more here
implicit val someClassWithALongNameFormat = jsonFormat4(SomeClassWithALongName)
implicit val someClassWithALongNameInnerFormat = jsonFormat4(SomeClassWithALongNameInner)
implicit val someClassWithALongNameVariantBFormat = jsonFormat4(SomeClassWithALongNameVariantB)
... // many more here
}
长 val 名称有各种问题:
- 他们觉得多余(名字从未被读过)
- 他们让我的台词很长
- 它们引入了格式名称与格式类型不匹配的复制/粘贴风险
- 他们使 RHS 值不对齐,这隐藏了这里的常见模式
有没有办法在不命名的情况下将对象带入隐式范围?这样的事情会更整洁:
object MyJsonProtocol extends DefaultJsonProtocol {
... // many more here
implicit val _ = jsonFormat4(SomeClassWithALongName)
implicit val _ = jsonFormat4(SomeClassWithALongNameInner)
implicit val _ = jsonFormat4(SomeClassWithALongNameVariantB)
... // many more here
}
...但 Scala 不允许多个名为“_”的字段。
有没有办法将这些格式带入隐式范围而不用全部命名?还有另一种使用spray-json的方法可以避免这个问题吗?