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

Сериализиране на карта [A, B] с асансьор, като знаете A <-> String - json, scala, serialization, lift-json

Искам да сериализирам HashMap с типHashMap [Coord, Unite] с лифт-json. тези типове са специфични за моя проект, но има Coord -> String с функцията toString и мога да си върна Coord от String (дори ако той не е кодиран тук, но това не е от значение). Така че мислех, че мога да помоля lift-json да сериализира карта [String, Coord], но тук сериализирам (формат) (y) се опитам да прилагам същата функция (по рекурсивен начин), когато искам да използва сериализиращата функция, адаптирана към Карта [String, Coord]. Причината да не мога да направя трансформацията извън 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], което може да обясни безкрайната рекурсия.