假设我有以下实体
public class City {
public int id;
public String name;
}
public class State<T> {
public int id;
public String name;
public T capital;
}
我对资本的种类一无所知。
现在,我同时创建对象并调用toJson和fromJson,如下所示:
City capital = new City(1, "1");
State state = new State<City>(1, "1", capital);
Gson gson = new Gson();
String json = gson.toJson(state);
State fromJsonState = gson.fromJson(json, State.class);
我的from方法的返回对象是
键入所有内容,但大写(通用)的地方。
在json序列化和反序列化之后,如何获得相同的对象?
最佳答案
使用参数化的TypeToken构造Type并使用Gson#fromJson(String,Type)。
Gson gson = new Gson();
String json = gson.toJson(state);
Type type = new TypeToken<State<City>>() {}.getType();
State<City> fromJsonState = gson.fromJson(json, type);
System.out.println(fromJsonState.capital.getClass().getName());
输出:
com.x.y.z.City