我有以下代码:
public static class A
{
public A() {}
private List<B> bs = new ArrayList<B>();
public List<B> getBs() {
return bs;
}
public void setBs(List<B> bs) {
this.bs = bs;
}
}
public static class B
{
B(String foo){this.foo=foo;}
private String foo;
public String getFoo() {
return foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
}
public static void main(String[] args) throws Exception {
Gson gson = new Gson();
A a = new A();
a.getBs().add(new B("bar"));
System.out.println(gson.toJson(a));
}
正如预期的那样,输出是:
{"bs":[{"foo":"bar"}]}
但是,如果我将 A 设为 HashMap 的子类:
public static class A extends HashMap
我收到一个空集返回:{}
我什至尝试过:
System.out.println(gson.toJson(a, new TypeToken<A>(){}.getType()));
and:
System.out.println(gson.toJson(a, new TypeToken<HashMap>(){}.getType()));
有人可以告诉我是否/如何使用 GSON 序列化这个 HashMap 子类?
Gson 可以使用(默认和自定义)TypeAdapterFactory
实例和TypeAdapter
他们创建的对象用于序列化/反序列化您的对象。
它会遍历注册列表TypeAdapterFactory
对象并选择第一个可以创建合适的对象TypeAdapter
对于您提供的对象的类型。其中之一TypeAdapterFactory
对象,是类型之一MapTypeAdapterFactory
这创建了一个TypeAdapter
(类型MapTypeAdapterFactory$Adapter
)基于序列化/反序列化java.util.Map
接口(键/值)。它对您的自定义子类型的字段没有任何作用。
如果您希望 Gson 将您的类型序列化为Map
和自定义类型,您将需要注册一个自定义TypeAdapter
直接或自定义TypeAdapterFactory
创造了TypeAdapter
对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)