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

时间:2015-04-14 18:32:26

标签: java json gson

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

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使用了它要序列化的对象的动态类型中的字段(B类)。但。有没有办法让Gson使用对象的静态类型(A类)?我想要像

那样
{"aField":"field from a"}

感谢。

1 个答案:

答案 0 :(得分:1)

正如@ n​​jzk2发布的那样,我必须像toJson(Object src, Type srcType)一样使用gson.toJson(a, A.class)与A&#39的类。

对于那些没有像我这样看到这个小细节的人:

您必须使用A.class,而不是a.getClass()。前者是任何类的标识符,但后者返回documentation所说的对象的运行时类。

谢谢@ njzk2。