我使用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"}
感谢。
答案 0 :(得分:1)
正如@ njzk2发布的那样,我必须像toJson(Object src, Type srcType)
一样使用gson.toJson(a, A.class)
与A&#39的类。
对于那些没有像我这样看到这个小细节的人:
您必须使用A.class,而不是a.getClass()。前者是任何类的标识符,但后者返回documentation所说的对象的运行时类。
谢谢@ njzk2。