Scala Circe。编码器类型 任意
Scala Circe. Encoder type Any
我正在尝试将 class ResponseResult
编码为 json
case class ResponseResult (var Code : Int,
var Message: String,
var Data: Any )
var json = ResponseResult(1, "2", List(3,4,5)).asJson
我得到一个错误找不到参数编码器的隐式值:io.circe.Encoder[ResponseResult]
然后我创建编码器
object ResponseResult {
implicit val encodeResult: Encoder[ResponseResult] =
Encoder.forProduct3[ResponseResult, Int, String, Any]("Code", "Message", "Data") {
case ResponseResult(c, m, d) => (c, m, d.toString)
}
}
我收到错误消息无法找到参数编码器的隐式值:编码器[Any]
这是我的完整代码
import io.circe.Encoder
import io.circe.generic.auto._
import io.circe.syntax._
object a {
case class ResponseResult (var Code : Int,
var Message: String,
var Data: Any )
object ResponseResult {
implicit val encodeResult: Encoder[ResponseResult] =
Encoder .forProduct3[ResponseResult, Int, String, Any]("Code", "Message", "Data") {
case ResponseResult(c, m, d) => (c, m, d.toString)
}
}
def main(args: Array[String]): Unit = {
var json = ResponseResult(1, "2", List(3,4,5)).asJson
}
}
任何人都可以告诉我如何编码 class ResponseResult
。
谢谢
好吧,您不能为 Any
类型设置编解码器,就这么简单。
如果你想在那里传递一些值,序列化它并能够在以后反序列化它,你必须假定某种类型。您可以使用类型参数推迟此假设:
case class ResponseResult[Data](Code : Int,
Message: String,
Data: Data)
并要求此类型参数存在编码器:
object ResponseResult {
implicit def encodeResult[Data: Encoder]: Encoder[ResponseResult[Data]] =
Encoder.forProduct3[ResponseResult[Data], Int, String, Data]("Code", "Message", "Data") {
case ResponseResult(c, m, d) => (c, m, d)
}
}
然后你就可以按照你想要的方式序列化数据了
// inferred to ResponseResult[List[Int]]
val response = ResponseResult(1, "2", List(3,4,5))
// and Circe can generate codec for List[Int] automatically
// so it can now generate codec for ResponseResult[List[Int]]
val json = response.asJson
实际上,您可以使用 Json 类型的数据。
case class ResponseResult (var Code : Int,
var Message: String,
var Data: io.circe.Json )
因此您可以将任何内容传递给 Data,也可以传递 null。
我正在尝试将 class ResponseResult
编码为 json
case class ResponseResult (var Code : Int,
var Message: String,
var Data: Any )
var json = ResponseResult(1, "2", List(3,4,5)).asJson
我得到一个错误找不到参数编码器的隐式值:io.circe.Encoder[ResponseResult]
然后我创建编码器
object ResponseResult {
implicit val encodeResult: Encoder[ResponseResult] =
Encoder.forProduct3[ResponseResult, Int, String, Any]("Code", "Message", "Data") {
case ResponseResult(c, m, d) => (c, m, d.toString)
}
}
我收到错误消息无法找到参数编码器的隐式值:编码器[Any]
这是我的完整代码
import io.circe.Encoder
import io.circe.generic.auto._
import io.circe.syntax._
object a {
case class ResponseResult (var Code : Int,
var Message: String,
var Data: Any )
object ResponseResult {
implicit val encodeResult: Encoder[ResponseResult] =
Encoder .forProduct3[ResponseResult, Int, String, Any]("Code", "Message", "Data") {
case ResponseResult(c, m, d) => (c, m, d.toString)
}
}
def main(args: Array[String]): Unit = {
var json = ResponseResult(1, "2", List(3,4,5)).asJson
}
}
任何人都可以告诉我如何编码 class ResponseResult
。
谢谢
好吧,您不能为 Any
类型设置编解码器,就这么简单。
如果你想在那里传递一些值,序列化它并能够在以后反序列化它,你必须假定某种类型。您可以使用类型参数推迟此假设:
case class ResponseResult[Data](Code : Int,
Message: String,
Data: Data)
并要求此类型参数存在编码器:
object ResponseResult {
implicit def encodeResult[Data: Encoder]: Encoder[ResponseResult[Data]] =
Encoder.forProduct3[ResponseResult[Data], Int, String, Data]("Code", "Message", "Data") {
case ResponseResult(c, m, d) => (c, m, d)
}
}
然后你就可以按照你想要的方式序列化数据了
// inferred to ResponseResult[List[Int]]
val response = ResponseResult(1, "2", List(3,4,5))
// and Circe can generate codec for List[Int] automatically
// so it can now generate codec for ResponseResult[List[Int]]
val json = response.asJson
实际上,您可以使用 Json 类型的数据。
case class ResponseResult (var Code : Int,
var Message: String,
var Data: io.circe.Json )
因此您可以将任何内容传递给 Data,也可以传递 null。