Java 具有静态类型或运行时类型的Gson
我正在使用Gson从层次结构序列化一个类,这是我的概念验证代码:Java 具有静态类型或运行时类型的Gson,java,json,gson,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 =
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"}
谢谢。正如@njzk2所发布的,我必须将
toJson(objectsrc,Type srcType)
与A的类一起使用,如gson.toJson(A,A.class)
对于其他像我这样没有看到这个细节的人:
您必须使用.class,而不是.getClass()。前者是任何类的标识符,但后者返回对象的运行时类
谢谢@njzk2。是的。使用
toJson(objectsrc,Type srcType)
并明确指定所需的类型。在您的例子中,gson.toJson(a,a.class)
作为旁注,对象a
不包含声明类型a
的任何知识。我在任何地方都没有看到这个问题的重复。您应该将您的评论扩展为@njzk2的答案。