【发布时间】:2016-05-02 22:57:46
【问题描述】:
一个更清楚的例子:
public class GsonDemo {
public static void main(String[] args) {
Gson gson = new Gson();
DataContainer<ExtendedData> dataContainer = new DataContainer<ExtendedData>();
dataContainer.data = new ExtendedData();
dataContainer.data.baseData = "base_data";
dataContainer.data.extraData = "extra_data";
String json = gson.toJson(dataContainer); // {"data":{"extraData":"extra_data","baseData":"base_data"}}
System.out.println(json);
json = gson.toJson(dataContainer, new TypeToken<DataContainer<Data>>() {}.getType());
System.out.println(json); // i don't want 'extraData' here. Why it steel serializing?
}
}
以及我使用的数据类:
class DataContainer<D extends Data> {
D data;
}
class Data {
String baseData;
}
class ExtendedData extends Data {
String extraData;
}
我想将DataContainer<ExtendedData> 转换为DataContainer<Data> 并在没有extraData 的情况下对其进行序列化。我实际上不能投DataContainer<ExtendedData>:
DataContainer<Data> castedDataContainer = (DataContainer<Data>) dataContainer; // Inconvertible types; cannot cast 'DataContainer<ExtendedData>' to 'DataContainer<Data>'
结果,我期望在指令 TypeToken:{"data":{"baseData":"base_data"}}
但是extraData是钢铁连载。我做错了什么?
【问题讨论】:
-
我从不期望一个简单的演员阵容在这里有所作为。我希望你需要做一个明确的副本。