/ / Serialiaze un mapa [A, B] con lift-json conociendo A <-> String - json, scala, serialización, lift-json

Serialiaze un mapa [A, B] con lift-json conociendo A <-> Cadena - json, scala, serialización, lift-json

Quiero serializar un HashMap que tenga tipoHashMap [Coord, Unite] con lift-json. esos tipos son específicos de mi proyecto, pero hay Coord -> String con la función toString y puedo recuperar mi Coord de String (incluso si no está codificado aquí, pero eso no es relevante). Entonces pensé que podría pedirle a lift-json que serialice un Map [String, Coord] pero aquí serializar (formato) (y) intento aplicar la misma función (de forma recursiva) cuando quiero que use la función de serialización adaptada a Mapa [Cadena, Coord]. La razón por la que no puedo hacer la transformación fuera del serializador es porque este HashMap es parte de una clase de caso más grande, por lo que necesito lift-json para saber cómo serializarlo y deserializarlo.

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

}

Podría reescribir la serialización y la deserialización de un Mapa [String, Unite], pero eso sería una gran cantidad de código inútil solo porque no entiendo cómo funciona suficientemente lift-json.

Respuestas

1 para la respuesta № 1

Puede que me falte algo, pero me parece que el problema aquí es el borrado de tipo; en tiempo de ejecución, no hay diferencia entre HashMap[Coord, Unite] y HashMap[String, Unite], lo que puede explicar la recursión sin fin.