タイプHashMap[Coord、Unite]のHashMapをlift-jsonでシリアル化したい。これらのタイプは私のプロジェクトに固有ですが、toString関数を使用してCoord-> Stringがあり、StringからCoordを戻すことができます(ここでコーディングされていなくても、関係ありません)。だから私はlift-jsonにMap[String、Coord]をシリアル化するように頼むことができると思いましたが、ここでserialize(format)(y)は、に適合したシリアル化関数を使用したいときに同じ関数を(再帰的に)適用しようとしますMap [String、Coord]。シリアライザーの外部で変換を実行できない理由は、この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がどのように機能するかを理解していないという理由だけで、多くの役に立たないコードになります。