json - 使用 Play Json 序列化多态 F 案例类
问题描述
我有一种情况,我必须这样做case class Config[F[_]](pattern: String, format:F[String])
,因为有时格式应该存在,并且像使用它Config[Id]
有时不使用它并使用Config[Option]
. 问题是,这是如何应对 Play 或 Spray Json 以及序列化/反序列化这种结构的一些最佳实践。我以前用过这个技巧几次,但从来没有强制序列化,直到我想知道读写方法应该是什么样子。此外,如果有任何缺点或处罚,性能也是明智的。有什么想法吗?谢谢各位!
解决方案
首先,如果派生没有变坏,您将能够为 Config[List] 和 Config[Option] 制作编解码器。
在circe它应该是这样的:
implicit val configOptionCodec: Codec[Config[Option]] = deriveCodec
implicit val configListCodec: Codec[Config[List]] = deriveCodec
这不会给您带来太多性能损失,只是样板损失。但是,您可以编写像 @JsonCodecsFor(List, Option, Chain) 这样的宏。