小编use*_*647的帖子

为什么Gson序列化列表中的运行时类型,而不是指定的编译时类型?

为什么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)

java generics json types gson

8
推荐指数
1
解决办法
267
查看次数

标签 统计

generics ×1

gson ×1

java ×1

json ×1

types ×1