使用 class 元数据序列化 JSON

Serializing JSON with class metadata

我用过 Gson 和 Jackson,它们都提供了一种处理多态性的方法。例如,对于 Jackson,您需要使用 @JsonSubTypes 声明 class 并添加您拥有的每个 @JsonSubTypes.Type。类似的事情发生在 Gson 身上。

我的问题是是否有一个选项可以让它像 MongoDB 序列化数据一样工作。它会自动添加一个 _class 元数据字段。使用此方法,您无需手动注册您创建的每个子类型。

可能吗?

你可以用 jackson 来实现:

@JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY, property = "_class")
public abstract class AbstractModel {
    
}

public class ModelA extends AbstractModel {
    
}
...
mapper.writeValue(System.out, new ModelA());

输出:

{
  "_class" : "demo.ModelA"
}

这样您就不必为添加的所有类型添加 json 子类型。