Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';如果扩展了ArrayList,则不能使用Jackson Json类字段序列化_Java_Json_Jackson - Fatal编程技术网

Java Can';如果扩展了ArrayList,则不能使用Jackson Json类字段序列化

Java Can';如果扩展了ArrayList,则不能使用Jackson Json类字段序列化,java,json,jackson,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> { pri

我正在使用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
}
结果文件仅包含数据元素:

[ {
  "date" : 1446405540000,
  "val1" : 10296,
  "val2" : 30365
}, {
  "date" : 1446405600000,
  "val1" : 40164,
  "val2" : 20222
} ]
“num”和“info”未保存到文件中


如何保存完整类及其字段?

Jackson将根据
JsonFormat.Shape
对POJO进行序列化。对于
ArrayList
对象,该对象是
ARRAY
。可以使用注释将形状更改为
对象

@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public class DataArray extends ArrayList<DataElement> {
当我尝试上面的代码时,我在生成的JSON中看到了这个字段

"empty":false

您可以使用
@JsonIgnore
来防止出现这种情况

在JSON中您会怎么看?将两个任意键/值对放入JSON数组(这就是JSON中的ArrayList)是不可能表示的。不要扩展ArrayList,只将ArrayList作为字段包含在类中。@peeskillet,ArrayList可能会以某种方式进行包装,例如:
{“num”:“123”,“info”:“information”,“ArrayList”:[{“date”:1446405540000,“val1”:10296,“val2”:30365},{“date”:1446405600000,“val1”:40164,“val2”:20222}
Jackson Json中有注释,但我无法从中获得请求的结果。那么它不再是一个Json数组,而是一个Json对象,在这种情况下,我个人更喜欢组合而不是继承。那就是我。我不知道也许你有保留遗产的要求。但不管怎么说,@ManosNikolaidis似乎有下面的解决方案。@peeskillet在这种情况下,我也更喜欢合成。好的,我会尝试转换成合成@ManosNikolaidis,谢谢你的回答。
public ArrayList<DataElement> getContents() {
    return new ArrayList<>(this);
}
"empty":false