主要涉及: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);
}
}