Scala Circe与泛型

我正在尝试使用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"),但是当我尝试对其进行编译时,我得到以下信息:

[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,对于一个 特定的类型

如果您不熟悉类型类,我建议您对其进行研究。然后查看Circe文档,了解如何专门实现编码器/解码器。

以上是 Scala Circe与泛型 的全部内容, 来源链接: utcz.com/qa/411817.html

回到顶部