Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有静态类型或运行时类型的Gson_Java_Json_Gson - Fatal编程技术网

Java 具有静态类型或运行时类型的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 =

我正在使用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(objectsrc,Type srcType)
与A的类一起使用,如
gson.toJson(A,A.class)

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

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


谢谢@njzk2。

是的。使用
toJson(objectsrc,Type srcType)
并明确指定所需的类型。在您的例子中,
gson.toJson(a,a.class)
作为旁注,对象
a
不包含声明类型
a
的任何知识。我在任何地方都没有看到这个问题的重复。您应该将您的评论扩展为@njzk2的答案。