具有静态类型或运行时类型的 Gson

Gson with static type, or runtime type

我正在使用 Gson 从层次结构中序列化一个 class,这是我的概念验证代码:

import com.google.gson.Gson;

class A {
    public String aField;
}

class B extends A {
    public String bField;
}

class Main {
    static public void main(String[] args) {
        B b = new B();
        b.aField = "field from a";
        b.bField = "field from b";
        A a = b;
        Gson gson = new Gson();
        System.out.println(gson.toJson(a));
    }
}

打印输出:

{"bField":"field from b","aField":"field from a"}

因此我们可以看到 Gson 使用其将要序列化的对象的动态类型中的字段 (class B)。但。有没有办法让Gson使用对象的静态类型(classA)?我想得到像

这样的东西
{"aField":"field from a"}

谢谢。

正如@njzk2 发布的那样,我必须像在 gson.toJson(a, A.class).

中那样将 toJson(Object src, Type srcType) 与 A 的 class 一起使用

对于像我一样没有看到这个小细节的其他人:

您必须使用 A.class,而不是 a.getClass()。前者是任何class的标识符,但后者returns,如documentation所说,runtime class对象。

感谢@njzk2。