【发布时间】:2012-07-08 12:16:01
【问题描述】:
我想用 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 的工作原理。
【问题讨论】:
标签: json scala serialization lift-json