我想将不同的List集合传递给GSON中的TypeToken类。这是我的班级
public class ConvertToObject<T> {
public T MappFrom(InputStream is)
String json = ConvertJsonInputStream.toString(is);
Gson gson = new Gson();
Type typeOfDest = new TypeToken<T>() {
}.getRawType();
T lstObject = gson.fromJson(json, typeOfDest);
return lstObject ;
}
}
现在我想以不同的方式实例化我的课程,如下所示:
AssetManager am = getApplicationContext().getAssets();
InputStream is = am.open("form.txt");
ConvertToObject<List<Form>> co = new ConvertToObject<List<Form>>();
List<Form> JsonForm = co.MappFrom(is);
InputStream is2 = am.open("Messages.txt");
ConvertToObject<List<Messages>> co = new ConvertToObject<List<Messages>>();
List<Messages> JsonForm = co.MappFrom(is2);
我的assets文件夹中有27个Json txt文件,我想将这些JSON txt文件解析为适当的类。我该怎么做?
Editted: 这样我就抓住了一个例外:
Caused by: java.lang.ClassCastException: com.google.gson.internal.StringMap cannot be cast to com.mypackage.Form
答案 0 :(得分:9)
我用这种方式解决了我的问题
public class ConvertToObject<T> {
public List<T> mapFrom(InputStream is, Type typeOfDest) {
String json = ConvertJsonInputStream.toString(is);
Gson gson = new Gson();
List<T> lstForm = gson.fromJson(json, typeOfDest);
return lstForm;
}
在我的活动中,我有这段代码:
ConvertToObject<Menu> co = new ConvertToObject<Menu>();
Type typeOfDest = new TypeToken<List<Menu>>() {
}.getType();
AssetManager am = getResources().getAssets();
Log.i("AssetManager", "AssetManager");
InputStream is = null;
try {
is = am.open("menu.txt");
} catch (IOException e) {
Log.i("InputStream", e.getMessage());
}
List<Menu> JsonForm = co.mapFrom(is, typeOfDest);