如何为Gson marshal和unmarshal创建通用方法?

时间:2017-10-24 18:44:40

标签: java json generics gson

我是Generics的新手。

我尝试创建通用的Gson marshal(即gson.toJson())和unmarshal(即gson.fromJson())方法。

public class Message {
    private MessageBody messageBody;
    ....
}
public class MessageBody {
    private List<BodyParam> bodyParams;
}
public class MessageBodyParam {
    private String name;        
    private Object value;
}

public class JsonUtil {

    //This is not working
    public static <T> String marshal(Object object, Class<T> jtype) {
        Gson gson = new Gson();

        Type type = new TypeToken<T>() {}.getType();
        return gson.toJson(object, type);
    }

    //this is working as expected
    public static <T> T unmarshal(String jsonStr, Class<T> jtype) {
        Gson gson = new Gson();
        Type type = new TypeToken<T>() {}.getType();
        return gson.fromJson(jsonStr, type);
    }
}

我将这些方法称为:

//Message is my class
String jsonMessage = JsonUtil.marshal(message, Message.class);
Message message = JsonUtil.unmarshal(message, Message.class);

如何在JsonUtil.marshal()中接收类类型并返回String对象?

请帮我解决这个问题。 感谢。

1 个答案:

答案 0 :(得分:0)

为时已晚,但这个解决方案正在为我创建一个gson的通用类:

public class JSONConversion<T>{

    private  T t;


    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }

    public String ObjectToString(){

        Gson gson=new Gson();
        return gson.toJson(t);

    }
    public T StringToObject(String jsonString ,Class<T> tt){
        Gson gson=new Gson();
        return gson.fromJson(jsonString, tt);
    }

}

你可以像这样使用这个通用的gson类:

LoginResponse loginResponse = response.body();
JSONConversion<LoginResponse> jsonConversion=new JSONConversion<>();
jsonConversion.setT(loginResponse);
String createdJson=jsonConversion.ObjectToString());
Log.d("toJson",createdJson);            
LoginResponse convertedObject=jsonConversion.StringToObject(createdJson,LoginResponse.class);