【问题标题】:How do I use custom deserialization on gson for generic type?如何在 gson 上对泛型类型使用自定义反序列化?
【发布时间】:2015-04-25 03:08:40
【问题描述】:

对于标准的POJO,我们可以使用如下

GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(MyType2.class, new MyTypeAdapter());
gson.registerTypeAdapter(MyType.class, new MySerializer());
gson.registerTypeAdapter(MyType.class, new MyDeserializer());
gson.registerTypeAdapter(MyType.class, new MyInstanceCreator());

如果 POJO 是通用的呢? Gson user guide 没有提到它。下面是我的代码,但不是正确的。

gsonBuilder.registerTypeAdapter(CustomResponse<POJOA>.getClass(), new POJOADeserializer());
            gsonBuilder.registerTypeAdapter(CustomResponse<POJOB>.getClass(), new POJOBDeserializer());
            gsonBuilder.registerTypeAdapter(CustomResponse<POJOC>.getClass(), new POJOCDeserializer());

【问题讨论】:

    标签: java android json gson


    【解决方案1】:

    不要这样做:

    gsonBuilder.registerTypeAdapter(CustomResponse<POJOA>.getClass(), new POJOADeserializer());
    

    像这样注册你的反序列化器:

    gsonBuilder.registerTypeAdapter(
            new TypeToken<CustomResponse<POJOA>>(){}.getType(), new POJOADeserializer());
    

    【讨论】:

    • 感谢您的回答。请看看我的CustomRequest 课程。我可以从Log.d("CustomRequest", json); 打印 json。这意味着我得到了数据,但我没有从return (Response&lt;T&gt;) Response.success(gson.fromJson(json, typeOfT), HttpHeaderParser.parseCacheHeaders(response)); 得到任何东西。怎么了?
    • 我想我会开始新的问题:stackoverflow.com/questions/29873650/…
    猜你喜欢
    • 2017-01-04
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多