簡體   English   中英

如何為Gson元帥和Unmarshal創建通用方法?

[英]How to create Generic method for Gson marshal and unmarshal?

我是泛型新手。

我試圖創建通用的Gson元帥(即gson.toJson())和非元帥(即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對象?

請幫助我解決此問題。 謝謝。

為時已晚,但是這個解決方案對我來說為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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM