【发布时间】:2016-09-20 10:17:00
【问题描述】:
我们使用Scala 2.11.8 和Play framework 2.5.8
使用的数据可以这么简单:
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 并应用了它。
提供这些隐式的伴随对象如下所示:
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 类型修复 Map?
谢谢!
编辑
作为帕姆的回答
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]。
【问题讨论】:
标签: json scala enums playframework-2.0