2012-12-02 39 views
8

我想在GSON中将不同的列表集合传递给TypeToken类。这里是我的类如何在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); 

我有我的资产文件夹27 Json的txt文件,我想分析这些JSON txt文件进入他们合适的班级。我应该怎么做?

Editted: 这样,我捕捉异常:

Caused by: java.lang.ClassCastException: com.google.gson.internal.StringMap cannot be cast to com.mypackage.Form 

回答

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); 
+2

非常好,谢谢分享answare。 –