我们使用Scala 2.11.8
和Play framework 2.5.8
无法在播放与枚举解析映射到JSON斯卡拉
数据一起工作可以如此简单:
object EnumA extends Enumeration {
type EnumA = Value
val ONE, TWO, THREE = Value
}
case class NoWork(data: Map[EnumA.Value, String] = Map.empty)
我要存档什么是能够将NoWork
类解析为Json
。我知道它需要为Enumeration
提供一个隐式格式化程序。
我发现此解决方案:https://stackoverflow.com/a/15489179/1549135并应用它。
提供这些implicits同伴对象如下所示:
object NoWork {
implicit val enumAFormat = EnumUtils.enumFormat(EnumA)
implicit val jsonModelFormat = Json.format[NoWork]
}
,它总是失败,出现错误:
error: No implicit format for Map[EnumA.Value,String] available.
implicit val jsonModelFormat = Json.format[NoWork]
^
问题是什么?
我已经测试并将data
类型更改为Map[String, String]
允许序列化。 Enum
本身也是可以序列化的,所以现在 - 如何修复与Enum
类型?
谢谢!
编辑
由于Pamu的回答
implicit val writes = new Writes[Map[EnumA.Value, String]] {
override def writes(o: Map[EnumA.Value, String]): JsValue = Json.toJson(o.map { case (a, b) => Json.parse(s"""{${Json.toJson(a)}:${Json.toJson(b)}}""")}.toList)
}
显然为工作这个情况,我真的需要其他Map[Enum, T]
,我可以在整个应用程序中使用一个通用的解决方案。
转换但是,当我告知,'Enum'工作正常。但'Map [Enum,String]'没有。 – Atais
@Atais ...用你期待的内容编辑答案......请检查。希望这有助于 – pamu
,但是......你得到了与我最初询问的 – Atais