gson解析泛型对象

JAVA 专栏收录该内容
5 篇文章 0 订阅

主要涉及:T的class的获取,gson解析jsonarray

package test.gson;

abstract public class BaseDao<T> {
	abstract public Object parse(String json);
}

package test.gson;
import java.lang.reflect.ParameterizedType;  
import java.lang.reflect.Type;  
import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

public class HibernateBaseDao<T> extends BaseDao<T>{

<span style="background-color: rgb(255, 255, 153);">	private Class<T> entityClass;  </span>
	  
    /** 
     * 这个通常也是hibernate的取得子类class的方法 
     *  
     * @author "yangk" 
     * @date 2010-4-11 下午01:51:28 
     */  
    public HibernateBaseDao() {  
<span style="background-color: rgb(255, 255, 153);">        Type genType = getClass().getGenericSuperclass();  
        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();  
        entityClass = (Class) params[0];  <span style="white-space:pre">		</span>//获取T的class</span>
    }  

    @Override 
    public Object parse(String jsonStr)
    {
    	Gson gson = new Gson();
    	try{
    		T json = gson.fromJson(jsonStr, entityClass);
        	return json;
    	}
    	catch (Exception e)
    	{
<span style="white-space:pre">	</span>    //异常说明是jsonArray
    	    JsonParser parser = new JsonParser();
    	    JsonArray jsonArray= parser.parse(jsonStr).getAsJsonArray();

    	    List<T> objList = new ArrayList<T>();

    	    for(JsonElement obj : jsonArray){
    	        T cse = gson.fromJson( obj , entityClass);
    	        objList.add(cse);
    	    }
    		return objList;
    	}
    	
    }
}

package test.gson;

public class Entity {  
	  
    private String name;  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
}  

package test.gson;

import java.util.ArrayList;
import java.util.List;

public class EntityDao extends HibernateBaseDao<Entity> {  
	  
  
    public static void main(String[] args)
    {
    	Entity old = new Entity();
    	old.setName("abcd");
    	List<Entity> list = new ArrayList<Entity>();
    	
    	String str = "[{\"name\":\"abcd\"}]";
    	EntityDao dao = new EntityDao();
    	List<Entity> entity =  (List<Entity>) dao.parse(str);
    }
}  















  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值