我正在尝试使用scala json库Circe,将其包装在一个简单的特征中以提供往返于json的转换,我对此具有以下要求:
import io.circe.generic.auto._ import io.circe.parser._ import io.circe.syntax._ trait JsonConverter { def toJson[T](t : T) : String def fromJson[T](s: String) : T } case class CirceJsonConverter() extends JsonConverter{ override def toJson[T](t: T): String = t.asJson.noSpaces override def fromJson[T](s: String): T = decode[T](s).getOrElse(null).asInstanceOf[T] }
这样做的目的是简单地能够用任何对象调用JsonConverter并将其转换成json之类的东西jsonConverter.toJson(0) must equalTo("0"),但是当我尝试对其进行编译时,我得到以下信息:
jsonConverter.toJson(0) must equalTo("0")
[error] could not find implicit value for parameter encoder: io.circe.Encoder[T] [error] override def toJson[T](t: T): String = t.asJson.noSpaces [error] ^ [error] could not find implicit value for parameter decoder: io.circe.Decoder[T] [error] override def fromJson[T](s: String): T = decode[T](s).getOrElse(null).asInstanceOf[T] [error] ^ [error] two errors found
我当然可以拥有一个类,打算通过转换器放入的所有内容都继承自该类,但是我有一个印象,大约可以自动生成编码器/解码器?
除非您可以实施将任何对象转换为Json的策略,否则您想要的东西就不会起作用。瑟茜(和许多其他库),而不是选择使用名为类型类的通用模式,使其方便地定义你如何想要做的事,在这种情况下Encoder/ Decoder,对于一个 特定的类型 。
Encoder
Decoder
如果您不熟悉类型类,我建议您对其进行研究。然后查看Circe文档,了解如何专门实现编码器/解码器。