具有静态类型或运行时类型的 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。
我正在使用 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。