【发布时间】:2021-02-15 21:30:05
【问题描述】:
假设我有多种类型的 id 定义如下。
sealed trait Id {
val value: String
}
case class IdA(value: String) extends Id
case class IdB(value: String) extends Id
case class IdC(value: String) extends Id
这些类应该从以下 JSON 解码和编码。
{
"id: "some-id"
}
如何为 id 定义一些通用解码器/编码器,
case class A(id: IdA, name: String, count: Int)
case class B(id: IdB, name: String, count: Int)
case class C(id: IdC, name: String, count: Int)
以便可以将上面的类从下面的 JSON 中解码和编码?
{
"id" : "some-id",
"name": "some-name",
"count": 2
}
如果可能的话,我希望 id 字段对于解码器和编码器都是灵活的,在一种情况下 id 可能是“id-x”,在另一种情况下可能是“id-y”。
【问题讨论】:
-
您可以为 trait
Id创建一个自定义Codec,定义它应该如何工作。 -
您能提供一些示例实现吗?
-
我觉得您将几个问题混为一谈。哪个 json 应该解码成哪个类?哪些类应该编码到哪些 jsons 中?