9

GSON の TypeToken クラスに別の List コレクションを渡したい。これが私のクラスです

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 ファイルを適切なクラスに解析したいと考えています。どうすればいいですか?

編集済み: この方法で例外をキャッチします:

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

1 に答える 1

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);
于 2012-12-05T06:21:26.040 に答える