/ / Serialiaze une carte [A, B] avec lift-json sachant A <-> String - json, scala, sérialisation, lift-json

Serialiaze une carte [A, B] avec lift-json sachant A <-> String - json, scala, sérialisation, lift-json

Je veux sérialiser un HashMap ayant le typeHashMap [Coord, Unite] avec lift-json. ces types sont spécifiques à mon projet mais il y a Coord -> String avec la fonction toString et je peux avoir mon Coord de retour de String (même s’il n’est pas codé ici mais que ce n’est pas pertinent). Je pensais donc pouvoir demander à lift-json de sérialiser une carte [String, Coord] mais ici sérialiser (format) (y) essayer d'appliquer la même fonction (de manière récursive) quand je veux utiliser la fonction sérialiser adaptée à Carte [Chaîne, Coord]. La raison pour laquelle je ne peux pas "faire la transformation en dehors du Serializer est parce que cette HashMap fait partie d'une classe de cas plus importante, j'ai donc besoin de l'ascenseur-json pour savoir comment le sérialiser et le désérialiser.

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)
}
}

}

Je pourrais réécrire la sérialisation et la désérialisation d'un Map [String, Unite] mais ce serait beaucoup de code inutile simplement parce que je ne comprends pas assez le fonctionnement de lift-json.

Réponses:

1 pour la réponse № 1

Il se peut que je manque quelque chose, mais il me semble que le problème ici est la suppression du type; au moment de l'exécution, il n'y a pas de différence entre HashMap[Coord, Unite] et HashMap[String, Unite], ce qui peut expliquer la récursion sans fin.