我正在尝试为数据反序列化创建一个通用方法。
我的代码:
public <T> ExportedData<T> getExportData(T classType, String exportUri) {
Response response = _client.get(exportUri);
// System.out.println(response.body.toString());
ExportedData<T> exportedData = GsonSingleton.getGson().fromJson(response.body.toString(), new TypeToken<ExportedData<T>>() {
}.getType());
return exportedData;
}
response.body
:
{"totalResults":2,"limit":50000,"offset":0,"count":2,"hasMore":false,"items":[{"DevicesIDs":"","EmailAddress":"zatokar@gmail.com"},{"DevicesIDs":"","EmailAddress":"oto@increase.dk"}]}
我称之为通用方法的方式:
ExportedData<AccengageOutboundContact> exportedData = generalBulkHelper.getExportData(new AccengageOutboundContact(), uriLimitAndOffset);
AccengageOutboundContact
:
public class AccengageOutboundContact {
public String EmailAddress;
public String DevicesIDs;
}
ExportedData
:
public class ExportedData<T> {
public int totalResults;
public int limit;
public int offset;
public int count;
public boolean hasMore;
public List<T> items;
}
我希望得到一个AccengageOutboundContact
个对象的ArrayList。我得到的是StringMap
的ArrayList。
知道我做错了什么吗?
答案 0 :(得分:2)
我已经多次看过这个,但似乎并没有很好的重复链接。
基本上问题是T
在您的通用方法中被删除为Object
。因此,创建的TypeToken
不包含所需信息。
这会导致对StringMap
进行反序列化。
您可以通过将完整的TypeToken
传递给您的方法来解决此问题:
public <T> ExportedData<T> getExportData(TypeToken<ExportedData<T>> tt, String exportUri) {
Response response = _client.get(exportUri);
// System.out.println(response.body.toString());
ExportedData<T> exportedData = GsonSingleton.getGson().fromJson(response.body.toString(),
tt.getType());
return exportedData;
}
然后打电话给:
generalBulkHelper.getExportData(new TypeToken<ExportedData<AccengageOutboundContact>>(){},
uriLimitAndOffset);