Java对象用jackson将列表扩展到Json

我想使用Jackson将扩展列表的对象转换为Json。 例:

public class TryToSerialize extends ArrayList { private int number; private String word; public TryToSerialize(){ number = 0; word = ""; } @JsonProperty public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } @JsonProperty public String getWord() { return word; } public void setWord(String word) { this.word = word; } @JsonIgnore public String getAsJSON() throws IOException { ObjectMapper mapper = new ObjectMapper(); mapper.writeValue(new File("c:\\tts.json"), this); return mapper.writeValueAsString(this) ; } } 

当我序列化这个时,我只会获得Array部分。

  TryToSerialize tts = new TryToSerialize(); tts.setNumber(10); tts.setWord("Working"); tts.add("first"); tts.add("second"); tts.add("third"); String json = tts.getAsJSON(); 

JSON:

 ["first","second","third"] 

我正在寻找一种方法来包含对象的其他变量。

当您的对象扩展其中一个存在默认序列化行为的类时,您的额外字段将被忽略。

现在,我不清楚的一件事是应该是预期的结果。

如果您期望得到如下结果:

 {"number":10,"word":"Working","values":["first","second","third"]} 

然后,您应该能够通过自定义序列化程序执行此操作,如下所示:

 public class MySerializer extends JsonSerializer { @Override public void serialize(TryToSerialize toSerialize, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeStartObject(); jgen.writeNumberField("number", toSerialize.getNumber()); jgen.writeStringField("word", toSerialize.getWord()); provider.defaultSerializeField("values", toSerialize.iterator(), jgen); jgen.writeEndObject(); } } 

如果您期望得到如下结果:

 [10,"Working","first","second","third"] 

然后,序列化器将如下所示:

 public class MySerializer extends JsonSerializer { @Override public void serialize(TryToSerialize toSerialize, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeStartArray(); jgen.writeNumber(toSerialize.getNumber()); jgen.writeString(toSerialize.getWord()); for (Iterator iterator = toSerialize.iterator(); iterator.hasNext();) { jgen.writeString((String) iterator.next()); } jgen.writeEndArray(); } } 

然后,在两种情况下都使用以下方法注释您的类:

 @JsonSerialize(using = MySerializer.class) 

可能有更聪明的方法,但这应该工作……