使用类元数据序列化 JSON

yas*_*eco 4 java json jackson gson

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

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

是否可以?

Gho*_*kun 5

你可以用杰克逊来实现这一点:

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

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

Run Code Online (Sandbox Code Playgroud)

输出:

{
  "_class" : "demo.ModelA"
}
Run Code Online (Sandbox Code Playgroud)

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