Gson解析POJO类中的泛型参数

在开发Android与API交互的时候,使用Json格式传输,遇到了这样一个情况,返回数据格式POJO类如下:

public class ApiResult<T> {
    private int ret;
    private String msg;
    private T data;

    public int getRet() {
        return ret;
    }

    public void setRet(int ret) {
        this.ret = ret;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

}

其中data参数是根据不同的Api返回的不同的数据,这时候就需要用gson来解析泛型。

之前想到解析集合数组的时候是这样调用的

gson.fromJson(str, new TypeToken<ArrayList<MyObject>>(){}.getType());

所以照葫芦画瓢

gson.fromJson(str, new TypeToken<ApiResult<MyObject>>(){}.getType());

就实现了!

原理就是TypeToken使用反射实现了运行时检测类型。

具体可看源码以及文档

http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html

https://code.google.com/p/google-gson/source/browse/trunk/gson/src/main/java/com/google/gson/reflect/TypeToken.java

时间: 2024-10-15 23:42:18

Gson解析POJO类中的泛型参数的相关文章

编写高质量代码改善C#程序的157个建议——建议43:让接口中的泛型参数支持协变

建议43:让接口中的泛型参数支持协变 除了上一建议中提到的使用泛型参数兼容接口不可变性外,还有一种办法是为接口中的泛型声明加上out关键字来支持协变,如下所示: interface ISalary<out T> //使用out关键字 { void Pay(); } static void Main(string[] args) { ISalary<Programmer> s = new BaseSalaryCounter<Programmer>(); ISalary&l

《解析C#类中的构造函数》

一.  C#中的构造函数概述: C#中类包含数据成员和函数成员.函数成员提供了操作类中数据的某些功能,包括方法.属性.构造器和终结器.运算符和索引器. 1.   构造函数设计的定义: 构造器是允许将类型的实例初始化为良好状态的一种特殊方法. 2.    构造函数设计的作用: c#中创建一个引用类型的实例时,首先为实例的数据字段分配内存,然后初始化对象的附加字段(类型对象指针和同步块索引),最后调用类型的实例构造器来设置对象的初始化状态. 3.    对类没有定义任何共有的或受保护的构造器,导致该

【Android】解析Paint类中MaskFilter的使用

目录结构: contents structure [+] EmbossMaskFilter BlurMaskFilter MaskFilter可以用来指定画笔的边缘效果.如果引用开启硬件加速的话,那么MaskFilter将不会起作用.关闭硬件加速: android:hardwareAccelerated="false" Android中有两个已知的MaskFilter实现类,分别是:BlurMaskFilter和EmbossMaskFilter:BlurMaskFilter:指定模糊样

python类中的self参数和cls参数

1. self表示一个类的实例对象本身.如果用了staticmethod就无视这个self了,就将这个方法当成一个普通的函数使用了. 2. cls表是这个类本身. # 代码为证 class A(object): def func1(self): print("func1:", self) @staticmethod def func2(): print("func2") @classmethod def func3(cls): print("func3:&

PHP 类中给函数参数传自定义函数

class klass{ public function index(){ $names = array('firstname' => "Baba", 'lastname' => "O'Riley"); array_walk($names, array(__CLASS__, 'escape_data')); foreach ($names as $name) { print "$name\n"; } } public function

大话JSON之Gson解析JSON

(三)解析Json数组(多条Json数据) 比如有如下Json数据: [{'name':'John', 'grade':[{'course':'English','score':100},{'course':'Math','score':78}]},  //注:Json数组最外层一定要加"[]" {'name':'Tom', 'grade':[{'course':'English','score':86},{'course':'Math','score':90}]}] 如何处理这样的数

Gson通过借助TypeToken获取泛型参数的类型的方法(转)

最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下. 由于Java泛型的实现机制,使用了泛型的代码在运行期间相关的泛型参数的类型会被擦除,我们无法在运行期间获知泛型参数的具体类型(所有的泛型类型在运行时都是Object类型). 但是有的时候,我们确实需要获知泛型参数的类型,比如将使用了泛型的Java代码序列化或者反序列化的时候,这个时候问题就变得比较棘手. class Foo<T>

我的Android进阶之旅------&gt;解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1.问题描述 首先,需要解析的Json数据类似于下面的格式: { ret: 0, msg: "normal return.", news: [ { id: "NEW2016062800875700", from: "腾讯新闻客户端", qqnews_download_url: "http://inews.qq.com/m?refer=openapi_for_xiaotiancai", articletype: "1&

Gson通过借助TypeToken获取泛型参数的类型的方法

最近在使用Google的Gson包进行Json和Java对象之间的转化,对于包含泛型的类的序列化和反序列化Gson也提供了很好的支持,感觉有点意思,就花时间研究了一下. 由于Java泛型的实现机制,使用了泛型的代码在运行期间相关的泛型参数的类型会被擦除,我们无法在运行期间获知泛型参数的具体类型(所有的泛型类型在运行时都是Object类型). 但是有的时候,我们确实需要获知泛型参数的类型,比如将使用了泛型的Java代码序列化或者反序列化的时候,这个时候问题就变得比较棘手. class Foo<T>