Scala:导入的scala对象,其含义不适用于提供读取或写入格式(播放json)

时间:2017-11-08 23:46:00

标签: json scala play-json

我有一些scala代码需要使用implicits来序列化和反序列化json。

我们以前通过放置这些隐含的陈述(简化为假人)有所作为:

  (in some class SomeClass1)

  implicit val some1format = Json.format[SomeItem1]
  implicit val some2format = Json.format[SomeItem2]
  ...

全部作为类级变量。然后,类中的任何方法都可以从Json转换得很好。

但是,我们正在尝试将这些格式的隐式定义移动到单独的对象中。

所以我们创建了一个对象(例如:SomeFormatters),它只包含这些含义:

object SomeFormatters {
   implicit val some1format = Json.format[SomeItem1]
   implicit val some2format = Json.format[SomeItem2]
}

当我尝试将此对象导入SomeClass1时,我收到一个编译错误,指出没有为SomeItem1或SomeItem2找到反序列化器,即使我正在导入SomeFormatters。 (IDE说虽然没有使用SomeFormatters的导入,所以我已经知道有些东西已经关闭了。)

让SomeClass1了解SomeFormatters中的隐式定义的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

问题在于隐式值没有类型注释 -

而不是:

implicit val some1format = Json.format[SomeItem1]

我需要提出:

implicit val some1format: Format[SomeItem1] = Json.format[SomeItem1]