美文网首页
Gson解析泛型

Gson解析泛型

作者: 恋君一生 | 来源:发表于2020-06-06 08:48 被阅读0次
1、json对应的model是T
    String json = "{\"content\":\"测试\"}";

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

    /**
     * 将json字符串转换为ArrayList
     *
     * @param json
     * @param clazz
     * @param <T>
     * @return
     */
    public static <T> List<T> fromJsonToList(String json, Class<T> clazz) {
        List<T> 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<T> {
    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<T>
    String json = "{\"code\":\"100\",\"message\":\"测试\",\"data\":[{\"content\":\"测试1\"},{\"content\":\"测试2\"}]}";
  • 创建一个和json对应的model
/**
 * @author android_wjh
 * @date 2020/6/5
 */
public class DataListInfo<T> {
    private String code;
    private String message;
    private List<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 List<T> getData() {
        return data;
    }

    public void setData(List<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(DataListInfo.class, clazz);
        DataListInfo dataListInfo = gson.fromJson(json, objectType);

相关文章

网友评论

      本文标题:Gson解析泛型

      本文链接:https://www.haomeiwen.com/subject/optzzhtx.html