具有TypeTag

时间:2018-09-14 05:36:19

标签: scala json4s scala-reflect scala-2.12

注意:我已经张贴在json4s的github issues页面上,但是没有得到任何回应。由于这个问题,我被困住了。

在将scala中的case类转换为json时,出现以下错误。

  

找不到类java.lang.ClassLoade的ScalaSig

如果我在任何混合特征中都没有typeTag引用,则能够转换为json。

在scala 2.11和json4s 3.4中一切正常,当我尝试将scala升级到2.12时,我开始遇到此问题。

trait NameLike {
def name:String
}

abstract class Copyable[T:TypeTag] {
  def tag:TypeTag[T] = typeTag[T]
}

case class Employee(id:Long, firstName:String, lastName:String) extends Copyable[Employee] with NameLike {
  override val name: String = firstName + " " + lastName
}

然后在我的实现中,我要填充Employee案例类并转换为json。它引发了ScalaSig错误。

这是我的Json4s逻辑:

trait JsonUtilities {
  self: TypeSerializers =>


  def toJson(obj: Any): String = {
    compact(Extraction.decompose(obj))
  }

}

trait TypeSerializers {
  implicit lazy val serializerFormats: Formats = new DefaultFormats {
    override def dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")

    override val fieldSerializers: List[(Class[_], FieldSerializer[_])] = List((classOf[NameLike], FieldSerializer[NameLike]()))
  }
}

object JsonUtilitiesImpl extends JsonUtilities with TypeSerializers

如果我没有FieldSerializer,那么json转换就可以了。

还有其他人遇到过这个问题吗?

Scala Version : 2.12.6
Json4s version : 3.6.1

0 个答案:

没有答案