杰克逊:具有不同类型项的对象数组的反序列化

时间:2014-01-15 14:29:05

标签: java arrays json object deserialization

Jackson:具有不同类型项的对象数组的反序列化

我正在将一个对象数组转换为json,这很好。但是当我尝试从json返回对象数组时,有些项目会丢失它们的类型。例如:java.sql.Date对象转换为String

示例:

List<Object> list = new ArrayList<Object>();

list.add(BigDecimal.ONE);
list.add(new java.util.Date(System.currentTimeMillis()));

String text = objectMapper.writeValueAsString(list );

List<Object> deserializeList = objectMapper.readValue(text , TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, valueType));

BigDecimal已转换为Integer

Date已转换为String

请帮助我在不使用POJO类的情况下维护对象数组的数据类型,我需要从服务器向客户端返回一个多维对象数组。

1 个答案:

答案 0 :(得分:0)

首先,我并不完全了解您的需求和API,但解决问题的最佳方法是使用POJO让杰克逊处理明确的数据类型(而不是对象)。

但好吧,你不想要那个。您可以做的是为Jackson实现自定义反序列化器(请参阅http://wiki.fasterxml.com/JacksonHowToCustomDeserializers)。

如果你真的想保留序列化/反序列化的集合,只需创建一个新的类,List的子类,并为它创建一个自定义的反序列化器。