/ / Karte [A, B] mit Lift-Json serialisieren, wobei A <-> String - Json, Scala, Serialization, Lift-Json bekannt ist

Serialisieren Sie eine Karte [A, B] mit lift-json, die A <-> String - json, scala, Serialisierung, lift-json kennt

Ich möchte eine HashMap mit dem Typ serialisierenHashMap [Coord, Unite] mit lift-json. Diese Typen sind spezifisch für mein Projekt, aber es gibt Coord -> String mit der Funktion toString und ich kann meine Coord von String zurück haben (auch wenn es hier nicht codiert ist, aber das ist nicht relevant). Also dachte ich, ich könnte lift-json bitten, eine Map [String, Coord] zu serialisieren, aber hier versuchen serialize (format) (y), dieselbe Funktion (auf rekursive Weise) anzuwenden, wenn ich die Serialisierungsfunktion verwenden möchte, die an angepasst ist Map [String, Coord]. Der Grund, warum ich die Transformation nicht außerhalb des Serializers durchführen kann, ist, dass diese HashMap Teil einer größeren Case-Klasse ist, sodass ich lift-json brauche, um zu wissen, wie man sie serialisiert und deserialisiert.

class UnitzSerializer extends Serializer[HashMap[Coord,Unite]] {

private val UnitzClass = classOf[HashMap[Coord,Unite]]

def deserialize(implicit format:Formats): PartialFunction[(TypeInfo,JValue), HashMap[Coord,Unite]]= {
case (TypeInfo(UnitzClass,_), json) => json match {
case x:JValue => (deserialize(format)((TypeInfo(classOf[Map[String,Unite]],None),x))).map(y => (Coord(0,0),y._2))
case _  => throw new Exception("ONOz")
}
}


def serialize(implicit format: Formats): PartialFunction[Any, JValue] = {
case x: HashMap[Coord,Unite] => {
val y:Map[String,Unite] = x.map(z => (z._1.toString,z._2))
serialize(format)(y)
}
}

}

Ich könnte die Serialisierung und Deserialisierung einer Map [String, Unite] umschreiben, aber das wäre viel nutzloser Code, nur weil ich nicht verstehe, wie lift-json genug funktioniert.

Antworten:

1 für die Antwort № 1

Ich könnte etwas vermissen, aber es scheint mir, dass das Problem hier die Typ-Löschung ist; zur Laufzeit gibt es keinen Unterschied zwischen HashMap[Coord, Unite] und HashMap[String, Unite], was die endlose Rekursion erklären kann.