2016-03-09 2 views
0

Я пытаюсь сериализовать и затем десериализовать неизменяемую ListMap Scala с помощью Jackson.Scala ListMap десериализация с использованием jackson

Я определяю val foo: ListMap[String, String] = ListMap("foo1" -> "bar1", "foo2" -> "bar2"), а затем сериализуем его с помощью джексона. Я проверил сериализованную строку, и все выглядело отлично. Затем, когда я пытаюсь десериализации строку, используя Джексон, я получаю следующее сообщение об ошибке:

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?

ответ

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) 
Смежные вопросы