我正在尝试使用Jackson序列化然后反序列化Scala不可变ListMap。
我定义val foo: ListMap[String, String] = ListMap("foo1" -> "bar1", "foo2" -> "bar2")
然后使用jackson序列化它。我验证了序列化的字符串,看起来很好。然后当我尝试使用Jackson反序列化字符串时,我收到以下错误:
java.lang.ClassCastException: scala.collection.immutable.Map$Map1 cannot be cast to scala.collection.immutable.ListMap
at .<init>(<console>:12)
at .<clinit>(<console>)
at .<init>(<console>:7)
at .<clinit>(<console>)
at $print(<console>)
知道如何有效地序列化/反序列化ListMaps吗?
答案 0 :(得分:2)
序列化ListMap的代码是
val mapper = new ObjectMapper
mapper.registerModule(DefaultScalaModule)
val m = ListMap((5, 1), (2, 33), (7, 22), (8, 333))
mapper.writeValueAsString(m)
反序列化是
val str = """{"5":1,"2":33,"7":22,"8":333}"""
val listMap:ListMap = objectMapper.readValue[ListMap](str)
使用与序列化示例中相同的初始化映射器。
用于序列化
{"5":1,"2":33,"7":22,"8":333}
用于反序列化
Map(5 -> 1, 2 -> 33, 7 -> 22, 8 -> 333)