如果扩展ArrayList,则无法使用Jackson Json类字段进行序列化

时间:2015-11-03 10:17:52

标签: java json jackson

我正在使用Jackson Json。如果类扩展了ArrayList,我无法序列化类字段。

类别:

public class DataElement {
    private Date date;
    private int val1;
    private int val2;
    // constructor, getters, setters
}

public class DataArray extends ArrayList<DataElement> {
    private String info;
    private int num;
    // constructor, getters, setters
}

序列化:

ObjectMapper jsonMapper = new ObjectMapper();
jsonMapper.writeValue(new File("path"), dataArray);

结果文件仅包含DataElements:

[ {
  "date" : 1446405540000,
  "val1" : 10296,
  "val2" : 30365
}, {
  "date" : 1446405600000,
  "val1" : 40164,
  "val2" : 20222
} ]

'num'和'info'不会保存到文件中。

如何保存包含其字段的完整课程?

1 个答案:

答案 0 :(得分:2)

杰克逊将根据JsonFormat.Shape序列化您的POJO。对于ArrayList的{​​{1}}对象。您可以使用注释将形状更改为ARRAY

OBJECT

确保@JsonFormat(shape = JsonFormat.Shape.OBJECT) public class DataArray extends ArrayList<DataElement> { 有一个getter,例如返回DataArray

ArrayList

当我尝试上面的代码时,我在生成的JSON

中看到了这个字段
public ArrayList<DataElement> getContents() {
    return new ArrayList<>(this);
}

您可以使用"empty":false 来阻止其出现