/ / Серіалізація карти [A, B] з lift-json знаючи A <-> String - json, scala, серіалізація, lift-json

Serialiaze a map [A, B] with lift-json knowing A <-> String - json, scala, serialization, lift-json

Я хочу серіалізувати тип типу HashMapHashMap [Coord, Unite] з lift-json. ці типи є специфічними для мого проекту, але є Coord -> String з функцією toString, і я можу повернути мій Coord від String (навіть якщо він тут не закодований, але це "не має значення". Тому я думав, що я можу попросити lift-json серіалізувати Map [String, Coord], але тут серіалізувати (формат) (y) спробувати застосувати ту саму функцію (рекурсивно), коли я хочу, щоб вона використовувала функцію serialize, адаптовану до Карта [Рядок, координат]. Причина, по якій я не можу зробити трансформацію за межами Serializer, полягає в тому, що цей HashMap є частиною більшого класу, тому мені потрібен lift-json, щоб знати, як його серіалізувати та десеріалізувати.

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

}

Я можу переписати серіалізацію та десеріалізацію карти [String, Unite], але це було б багато непотрібного коду тільки тому, що я не розумію, наскільки lift-json працює достатньо.

Відповіді:

1 для відповіді № 1

Я можу чогось бракувати, але мені здається, проблема тут - стирання типу; під час виконання, різниці між ними немає HashMap[Coord, Unite] і HashMap[String, Unite], що може пояснити нескінченну рекурсію.