我正在使用Jackson 1.8.3将以下域对象序列化和反序列化为JSON
public class Node { private String key; private Object value; private List<Node> children = new ArrayList<Node>(); /* getters and setters omitted for brevity */ }
然后使用以下代码对对象进行序列化和反序列化
ObjectMapper mapper = new ObjectMapper(); mapper.writeValue(destination, rootNode);
然后用
mapper.readValue(destination, Node.class);
对象的原始值为Strings,Doubles,Longs或Booleans。但是,在序列化和反序列化过程中,Jackson将Long值(例如4)转换为Integers。
如何“强制” Jackson将数字非十进制值反序列化为Long而不是Integer?
如果将type声明为java.lang.Object,则Jackson将使用“自然”映射,如果值适合32位,则使用Integer。除了自定义处理程序之外,您还必须强制包含类型信息(通过在field / getter旁边添加@JsonTypeInfo;或启用所谓的“默认类型”)。