在这种情况下如何为GSON

时间:2017-07-11 07:31:04

标签: java gson

我有以下代码来说明我的问题:

首先,我定义Box类和Cat类

public class Box<T> {
    private T data;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
public class Cat {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

然后我定义了GsonUtils(静态类),旨在将一些json字符串序列化为Box<T>的对象

public class GsonUtils {

    public static <T> Box<T> json2BoxObject(String json) {
        Type tpe = new TypeToken<Box<T>>(){}.getType();
        return  new GsonBuilder().create().fromJson(json, tpe);
    }

}
  1. 如果我可以为Cat方法提供json2BoxObject类型,那么我会得到Box<Cat>
  2. 如果我可以提供Dog类型到json2BoxObject方法,那么我会得到Box<Dog>
  3. 但是,我不知道如何为json2BoxObject提供类型,这是我要问的问题

    使用上面的代码,给json2BoxObject json字符串{"data":{"name":"Kitty","age":1}},我想得到一个Box<Cat>对象,但我得到一个Box [Map]

1 个答案:

答案 0 :(得分:0)

在某些时候你需要提到猫或狗。我使用Box创建了Type并使用json2Java方法传递了它。

String msg ="{\"data\":{\"name\":\"Kitty\",\"age\":1}}";
Type type = new TypeToken<Box<Cat>>(){}.getType();
Box<Cat> obj = GsonUtils.json2Java(msg, type);
System.out.println(obj);

json2Java方法是:

public static <T> Box<T> json2Java(String json, Type type) {
    Box<T> box = new GsonBuilder().create().fromJson(json, type);
    return box;
}