使用不同的可能参数化类型反序列化为模板化类

时间:2016-08-29 22:38:21

标签: java json serialization gson deserialization

我有一个嵌套子类的类

let loginParams: [String: AnyObject] = [
  "userName": String(uname) ,
  "password" : String(pwd),
  "deviceInfo": deviceInfoObj
]

我想在不同情况下反序列化到不同版本的GenericClassHolder。目前我有

public class OuterClass {
    class GenericClassHolder<R> {
        @SerializedName("results")
        List<R> results;

        public GenericClassHolder() {}

        public List<R> getResults() {
            return results;
        }
    }

    class ExampleClassA {
        @SerializedName("A")
        int a;

        public ExampleClassA() {}

        public int getA() {return a;}
    }


    class ExampleClassB {
        @SerializedName("B")
        String b;

        public ExampleClassA() {}

        public String getB() {return b;}
    }
}

这似乎没有破坏任何东西,但是当我到达以下行时

public <T> OuterClass.GenericClassHolder<T> parseJson(final String responseStr, final Class<T> responseClass) throws JsonSyntaxException {
    return Gsons.getInstance().fromJson(responseStr, new TypeToken<OuterClass.GenericClassHolder<T>>() {
    }.getType());
}


String jsonString = "{results:[{A:4}]}";
OuterClass.GenericClassHolder<OuterClass.ExampleClassA> ex = parseApiResponse(jsonString, OuterClass.ExampleClassA.class);

我收到错误

  

线程中的异常&#34; main&#34; java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap无法强制转换为OuterClass $ ExampleClassA

如何实现能够解析包含参数化类型列表的模板化类的目标?

- 我正在使用Java 7。

0 个答案:

没有答案