首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用已知A<->字符串的lift-json序列化map[A,B

使用已知A<->字符串的lift-json序列化map[A,B
EN

Stack Overflow用户
提问于 2012-07-09 12:58:37
回答 1查看 218关注 0票数 0

我想序列化一个具有HashMapCoord类型的HashMap,Unite with lift-json。这些类型是特定于我的项目的,但是有带有toString函数的Coord ->字符串,我可以从String中恢复我的Coord (即使它没有在这里编码,但这并不重要)。所以我想我可以让lift-json来序列化一个格式,但是在这里serialize ( MapString )(Y)尝试应用相同的函数(以递归的方式),当我想让它使用适应于MapString的序列化函数时。我不能在序列化程序之外进行转换的原因是因为这个HashMap是一个更大的case类的一部分,所以我需要lift-json来知道如何序列化和反序列化它。

代码语言:javascript
复制
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)
   }
}

}

我可以重写MapString的序列化和反序列化,但那将是许多无用的代码,因为我不太了解lift-json是如何工作的。

EN

回答 1

Stack Overflow用户

发布于 2012-07-09 15:49:41

我可能遗漏了一些东西,但在我看来,这里的问题是类型擦除;在运行时,HashMap[Coord, Unite]HashMap[String, Unite]之间没有区别,这可能解释了无休止的递归。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11389285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档