Gson解析泛型

1、json对应的model是T
    String json = "{\"content\":\"测试\"}";

    public static  T fromJsonToObject(String json, Class clazz) {
        Gson gson = new Gson();
        return gson.fromJson(json, clazz);
    }
2、json对应的model是List
    String json = "[{\"content\":\"测试1\"},{\"content\":\"测试2\"}]";

    /**
     * 将json字符串转换为ArrayList
     *
     * @param json
     * @param clazz
     * @param 
     * @return
     */
    public static  List fromJsonToList(String json, Class clazz) {
        List list = new ArrayList<>();
        Gson gson = new Gson();
        JsonArray array = new JsonParser().parse(json).getAsJsonArray();
        for (JsonElement obj : array) {
            list.add(gson.fromJson(obj, clazz));
        }
        return list;
    }
3、json对应的model是 model里面包含T
    String json = "{\"code\":\"100\",\"message\":\"测试\",\"data\":{\"content\":\"测试1\"}}";
  • 创建一个和json对应的model
/**
 * @author android_wjh
 * @date 2020/6/5
 */
public class DataInfo {
    private String code;
    private String message;
    private T data;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
  • 定义一个type
    static ParameterizedType type(final Class raw, final Type... args) {
        return new ParameterizedType() {
            @Override
            public Type[] getActualTypeArguments() {
                return args;
            }

            @Override
            public Type getRawType() {
                return raw;
            }

            @Override
            public Type getOwnerType() {
                return null;
            }
        };
    }
  • 解析数据,clazz就是T的实体类。例如Content.class
        Gson gson = new Gson();
        Type objectType = type(DataInfo.class, clazz);
        DataInfo dataInfo = gson.fromJson(json, objectType);
4、json对应的model是 model里面包含List
    String json = "{\"code\":\"100\",\"message\":\"测试\",\"data\":[{\"content\":\"测试1\"},{\"content\":\"测试2\"}]}";
  • 创建一个和json对应的model
/**
 * @author android_wjh
 * @date 2020/6/5
 */
public class DataListInfo {
    private String code;
    private String message;
    private List data;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public List getData() {
        return data;
    }

    public void setData(List data) {
        this.data = data;
    }
}
  • 定义一个type
    static ParameterizedType type(final Class raw, final Type... args) {
        return new ParameterizedType() {
            @Override
            public Type[] getActualTypeArguments() {
                return args;
            }

            @Override
            public Type getRawType() {
                return raw;
            }

            @Override
            public Type getOwnerType() {
                return null;
            }
        };
    }
  • 解析数据,clazz就是T的实体类。例如Content.class
        Gson gson = new Gson();
        Type objectType = type(DataListInfo.class, clazz);
        DataListInfo dataListInfo = gson.fromJson(json, objectType);

你可能感兴趣的:(Gson解析泛型)