java为什么序列化不一致_java – 为什么Jackson多态序列化在列表中不起作用?
杰克遜正在做一些真正奇怪的事情,我找不到任何解釋.我正在進行多態序列化,當一個對象獨立時它可以很好地工作.但是,如果將相同的對象放入列表并對列表進行序列化,則會刪除類型信息.
它丟失類型信息的事實將導致人們懷疑類型擦除.但這是在列表內容的序列化過程中發生的;杰克遜所要做的就是檢查它正在序列化的當前對象以確定其類型.
我用Jackson 2.5.1創建了一個例子:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.List;
public class Test {
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY)
@JsonSubTypes({
@Type(value = Dog.class, name = "dog"),
@Type(value = Cat.class, name = "cat")})
public interface Animal {}
@JsonTypeName("dog")
public static class Dog implements Animal {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@JsonTypeName("cat")
public static class Cat implements Animal {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public static void main(String[] args) throws JsonProcessingException {
List list = new ArrayList<>();
list.add(new Cat());
System.out.println(new ObjectMapper().writeValueAsString(list));
System.out.println(new ObjectMapper().writeValueAsString(list.get(0)));
}
}
這是輸出:
[{"name":null}]
{"@type":"cat","name":null}
如您所見,當對象在列表中時,Jackson不會添加類型信息.有誰知道為什么會這樣?
總結
以上是生活随笔為你收集整理的java为什么序列化不一致_java – 为什么Jackson多态序列化在列表中不起作用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “寂绝无人问病身”下一句是什么
- 下一篇: java 嵌套对象转xml_Gson对J