/ / Serializar um mapa [A, B] com elevador-json sabendo A <-> String - json, scala, serialização, lift-json

Serializar um mapa [A, B] com elevador-json sabendo A <-> String - json, scala, serialização, lift-json

Eu quero serializar um HashMap tendo tipoHashMap [Coord, Unite] com o elevador-json. esses tipos são específicos do meu projeto, mas há Coord -> String com a função toString e eu posso ter meu Coord de volta de String (mesmo que ele não esteja codificado aqui, mas que não seja relevante). Então eu pensei em perguntar ao lift-json para serializar um Map [String, Coord] mas aqui serialize (format) (y) tente aplicar a mesma função (de uma maneira recursiva) quando eu quiser usar a função serialize adaptada para Mapeie [String, Coord]. A razão pela qual eu não consigo fazer a transformação fora do Serializer é porque este HashMap é parte de uma classe de caso maior, então eu preciso do lift-json para saber como serializar e desserializar.

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

}

Eu poderia reescrever a serialização e desserialização de um Map [String, Unite], mas isso seria um monte de código inútil só porque eu não entendo como o Lift-Json funciona o suficiente.

Respostas:

1 para resposta № 1

Eu poderia estar perdendo alguma coisa, mas parece-me que a questão aqui é o apagamento do tipo; em tempo de execução, não há diferença entre HashMap[Coord, Unite] e HashMap[String, Unite], o que pode explicar a recursão sem fim.