java - jackson : Losing type information

标签 java json serialization jackson

我正在尝试序列化/反序列化以下内容

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
@JsonSubTypes({ 
    @JsonSubTypes.Type(value = IdBundleCombine.class), 
    @JsonSubTypes.Type(value = IdBundleDistinct.class) })
public abstract class IdBundle
{
    String sharedId;
    Long   internalId;
    //getters
}

public class IdBundleCombine extends IdBundle
{
    //setters
}

public class IdBundleDistinct extends IdBundle
{
    //setters
}

使用以下代码

ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("foo.json"), someInstanceOfIdBundle);

生成以下内容(没有您所看到的类型信息):

{"sharedId":"foobar","internalId":1234}

因此,当我尝试反序列化它时,出现错误missing property '@type' that is to contains type id

我尝试了我能找到的 @JsonTypeInfo@JsonSubTypes 的所有参数组合,但从未成功获取要在文件中显示的类型信息。我还尝试在子类型上使用 @JsonTypeName 但没有结果。

我唯一的猜测是我在映射器上做错了什么,但我找不到关于这个主题的任何内容,因为大多数人似乎不希望类型信息显示在 json 字符串中,或者反序列化过程出现问题。

最佳答案

我确实尝试使用以下注释,它有效,即使使用属性标签也是如此。

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = As.PROPERTY, property = "@type")

关于java - jackson : Losing type information,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19680766/

相关文章:

java - HashMap单位转换程序无法识别key

JavaFx任务EventHandler在哪个线程中处理

java - 获取CPU使用率最高的进程

java - 文件的 JSON(简单)解析返回空值

django - DRF ListSerializer 和 ListField

java - hazelcast 配置中自动递增标志的用途

javascript - 在 JavaScript 中将数组对象转换为数组数组

mysql - 从连接的 MySQL 表中选择解码的 JSON 数据

c++ - 包含 Map(具有对象值)和 Multimap(具有 std::string 值)的对象的 boost 序列化:需要什么?

java - Java序列化是缩小内存占用的工具吗?