我想使用 Jackson 将一个将列表扩展为 Json 的对象转换。 示例:
public class TryToSerialize extends ArrayList<String>
{
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) ;
}
}
当我序列化它时,我只会得到数组部分。
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<TryToSerialize> {
@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<TryToSerialize> {
@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<String> iterator = toSerialize.iterator(); iterator.hasNext();) {
jgen.writeString((String) iterator.next());
}
jgen.writeEndArray();
}
}
然后,在这两种情况下都用以下方式注释您的类:
@JsonSerialize(using = MySerializer.class)
可能有更聪明的方法,但这应该有效......
关于Java 对象使用 Jackson 将列表扩展为 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26121594/