假设我有以下实体

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

10-06 13:18
查看更多