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类的情况下维护对象数组的数据类型,我需要从服务器向客户端返回一个多维对象数组。
答案 0 :(得分:0)
首先,我并不完全了解您的需求和API,但解决问题的最佳方法是使用POJO让杰克逊处理明确的数据类型(而不是对象)。
但好吧,你不想要那个。您可以做的是为Jackson实现自定义反序列化器(请参阅http://wiki.fasterxml.com/JacksonHowToCustomDeserializers)。
如果你真的想保留序列化/反序列化的集合,只需创建一个新的类,List的子类,并为它创建一个自定义的反序列化器。