首页 > 解决方案 > 使用 Play Json 序列化多态 F 案例类

问题描述

我有一种情况,我必须这样做case class Config[F[_]](pattern: String, format:F[String]),因为有时格式应该存在,并且像使用它Config[Id]有时不使用它并使用Config[Option]. 问题是,这是如何应对 Play 或 Spray Json 以及序列化/反序列化这种结构的一些最佳实践。我以前用过这个技巧几次,但从来没有强制序列化,直到我想知道读写方法应该是什么样子。此外,如果有任何缺点或处罚,性能也是明智的。有什么想法吗?谢谢各位!

标签: jsonscalaspray-jsonplay-jsonhigher-kinded-types

解决方案


首先,如果派生没有变坏,您将能够为 Config[List] 和 Config[Option] 制作编解码器。

在circe它应该是这样的:

implicit val configOptionCodec: Codec[Config[Option]] = deriveCodec
implicit val configListCodec: Codec[Config[List]] = deriveCodec

这不会给您带来太多性能损失,只是样板损失。但是,您可以编写像 @JsonCodecsFor(List, Option, Chain) 这样的宏。


推荐阅读