Scala 如何为json编组创建通用隐式转换

Scala 如何为json编组创建通用隐式转换,scala,types,marshalling,Scala,Types,Marshalling,我希望将case类的构造限制为某些类型,然后能够来回整理这些数据 例如,假设我有一个“home”case类,它接受一个“kind”参数。我想把“种类”的论点限制在批准的住房类型清单上,例如公寓、公寓等 object Home { // this will create an implicit conversion to json object implicit lazy val jsFormat = Jsonx.formatCaseClass[Home] } case class Ho

我希望将case类的构造限制为某些类型,然后能够来回整理这些数据

例如,假设我有一个“home”case类,它接受一个“kind”参数。我想把“种类”的论点限制在批准的住房类型清单上,例如公寓、公寓等

object Home {
  // this will create an implicit conversion to json object
  implicit lazy val jsFormat = Jsonx.formatCaseClass[Home]
}

case class Home(owner: String, kind: HousingType)
我现在需要的是一种整理
HousingType
的各种子类型的方法。例如,以下是一些关系:

trait HousingType

case object Apartment extends HousingType

case object Condo extends HousingType
可以预见,在不指定隐式转换的情况下尝试使用此选项会产生以下错误:

"could not find implicit value for parameter helper: ... HousingType"

有没有办法为此创建通用隐式转换?

您必须指定JSON封送拆收器如何转换您的
case对象,就像您有
case类一样,
JSON封送器
遵循默认行为非常简单-从
case类
中获取JSON字段名及其类型

您需要指明如何直接对
case对象进行marshall/unmarshall,例如通过隐式转换

  implicit object HousingTypeMarshaller extends Writes[HousingType] {
    def writes(housingType: HousingType) = housingType match {
      case Apartment => Json.toJson("Apartment")
      case Condo => Json.toJson("Condo")
    }
  }
p、 在本例中,我使用了惯常的play.json,因为我没有找到任何理由使用
Jsonx
,建议您在
play json
中遇到22个字段的限制,惯常的
play json
适用于
case object
的这种情况