java - 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 = "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(Object src, Type srcType) 与 A 的类一起使用,就像 gson.toJson(a, A.class) 中一样。

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

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

谢谢@njzk2。

关于java - Gson 具有静态类型或运行时类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29634894/

相关文章:

java - 插入数据库时​​字符串转换奇怪

java - 在java中获取错误的IP地址

json - 使用 Swift 从 JSON 数组填充 UITableView

php - 不同的 JSON 响应 - {"count":"123"} vs {"count"= >"123"}

javascript - IE8 对象当对象包含空值时出现预期错误

java - 使用 Gson 序列化匿名类

java - 改造 GSON 将日期从 json 字符串序列化为 long 或 java.lang.Long

java - JasperReport 与 struts2 一起使用的问题 - 在最终 PDF 文件中获取 null

java - 使用 GSON 创建复杂的 JSON 模型

java - 等待函数完成,直到回调到来