相关疑难解决方法(0)

为什么杰克逊多态序列化在列表中不起作用?

杰克逊正在做一些真正奇怪的事情,我找不到任何解释.我正在进行多态序列化,当一个对象独立时它可以很好地工作.但是,如果将相同的对象放入列表并将列表序列化,则会删除类型信息.

它丢失类型信息的事实将导致人们怀疑类型擦除.但是在序列化列表内容期间会发生这种情况; 杰克逊所要做的就是检查它正在序列化的当前对象以确定其类型.

我用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 = …
Run Code Online (Sandbox Code Playgroud)

java serialization json jackson

16
推荐指数
3
解决办法
9697
查看次数

标签 统计

jackson ×1

java ×1

json ×1

serialization ×1