Wir Scala 2.11.8
verwenden Karte mit Enum zu Json in Spielen zu analysieren und Play framework 2.5.8
Nicht in der Lage Scala
Daten mit arbeiten kann so einfach sein:
object EnumA extends Enumeration {
type EnumA = Value
val ONE, TWO, THREE = Value
}
case class NoWork(data: Map[EnumA.Value, String] = Map.empty)
Und was ich zu archivieren wollen, ist in der Lage sein, die Klasse NoWork
zu Json
zu analysieren. Ich weiß, dass dazu ein impliziter Formatierer für Enumeration
bereitgestellt werden muss.
Ich habe diese Lösung gefunden: https://stackoverflow.com/a/15489179/1549135 und angewendet es.
Das Objekt Begleiter diese implicits Bereitstellung sieht wie folgt aus:
object NoWork {
implicit val enumAFormat = EnumUtils.enumFormat(EnumA)
implicit val jsonModelFormat = Json.format[NoWork]
}
Und es nicht immer mit einem Fehler:
error: No implicit format for Map[EnumA.Value,String] available.
implicit val jsonModelFormat = Json.format[NoWork]
^
Was ist das Problem?
Ich habe den data
Typ getestet und geändert, um Map[String, String]
Serialisierung ermöglicht. Die Enum
für sich ist auch serialisierbar, so - wie nun die Map
mit Enum
Typ zu beheben?
Danke!
bearbeiten
Als Antwort der 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)
}
für diese Situation klar funktionieren würde, müsste ich eigentlich eine generische Lösung für andere Map[Enum, T]
, die ich in ganzer Anwendung nutzen könnte.
umgewandelt Aber wie ich sagte, die 'Enum' funktioniert gut. Aber 'Map [Enum, String]' nicht. – Atais
@Atais ... bearbeitet die Antwort ... mit dem, was Sie erwarten .. Bitte überprüfen Sie. Hoffe, das hilft – pamu
, aber ... Sie haben genau den gleichen Fehler, den ich ursprünglich gefragt habe über – Atais