为什么Gson在序列化时会忽略嵌套的泛型类型声明?
我试图让Gson使用我指定的编译时类型,而不是列表中的运行时类型的对象.我也使用抽象超类A.java,但下面的例子有同样的问题.
public class A {
public String foo;
}
public class B extends A {
public String bar;
}
public static void main( String[] args ) {
Gson gson = new Gson();
B b = new B();
b.foo = "foo";
b.bar = "bar";
List<A> list = new ArrayList<A>();
list.add(b);
System.out.println(gson.toJson(b, new TypeToken<A>(){}.getType()));
System.out.println(gson.toJson(b, new TypeToken<B>(){}.getType()));
System.out.println(gson.toJson(list, new TypeToken<List<A>>(){}.getType()));
System.out.println(gson.toJson(list, new TypeToken<List<B>>(){}.getType()));
}
Run Code Online (Sandbox Code Playgroud)
输出:
{"foo":"foo"}
{"bar":"bar","foo":"foo"}
[{"bar":"bar","foo":"foo"}]
[{"bar":"bar","foo":"foo"}]
Run Code Online (Sandbox Code Playgroud)
预期:
{"foo":"foo"}
{"bar":"bar","foo":"foo"}
[{"foo":"foo"}]
[{"bar":"bar","foo":"foo"}]
Run Code Online (Sandbox Code Playgroud)