我想用 Lift-json 序列化一个 HashMap[Coord,Unite] 类型的 HashMap。这些类型特定于我的项目,但有 Coord -> String 和 toString 函数,我可以从 String 返回我的 Coord(即使它没有在这里编码,但那不相关)。所以我想我可以让 lift-json 序列化 Map[String,Coord] 但是在这里 serialize(format)(y) 当我希望它使用适用于的序列化函数时尝试应用相同的函数(以递归方式)地图[字符串,坐标]。我不能在 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)
}
}
}
我可以重写 Map[String,Unite] 的序列化和反序列化,但这将是很多无用的代码,因为我不明白 lift-json 是如何工作的。