0

I wanna build a Class to parse List<T> to/from String using Gson:

private static class ListParser<T> {

    Gson gson = new Gson();

    public Type getGenericClass() {
        Type listType = new TypeToken<List<T>>() {
        }.getType();
        return listType;
    }

    public String toJson(List<T> list) {
        return gson.toJson(list, getGenericClass());
    }

    public List<T> fromJson(String json) {
        List<T> list1 = gson.fromJson(json, getGenericClass());
        List<T> list2 = new ArrayList<T>();
        for (int i = 0; i < list1.size(); i++) {
            T val = (T) list1.get(i);
            list2.add(val);
        }
        return list2;
    }
}

I used TypeToken as some tutorial I've found, but list1 and list2 were all List<Double>. I wonder if there is anyway to parse List<Double> to List<T> in Java.


you wanna like this??http://jsfiddle.net/kFBuD/1447/

overflow:hidden;
4

1 に答える 1

0

TgetGenericClass()のクラスを取得する必要があります。

あなたはそれを提供することができます:

  Class<T> type;

  public Class<T> getType() {
    return this.type;
  }

または実行時に取得します(安全ではありません。このサブジェットに関する多くの投稿を見つけることができると思います)

  public Class<T> getType() {
    return (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
  }

次に、次のコードを使用してリスト トークンを作成します。

  static TypeToken<?> getGenToken(final Class<?> raw, final Class<?> gen) throws Exception {
    Constructor<ParameterizedTypeImpl> constr = ParameterizedTypeImpl.class.getDeclaredConstructor(Class.class, Type[].class, Type.class);
    constr.setAccessible(true);
    ParameterizedTypeImpl paramType = constr.newInstance(raw, new Type[] { gen }, null);

    return TypeToken.get(paramType);
  }

ここで提供したサンプルを確認してください: GSON deserialize an array of complex objects

于 2013-09-13T12:52:10.507 に答える