Gson - deserializacja

0

Cześć,

Chcę utworzyć klasę generyczną, która będzie deserializować jsona do składowej będącej typu T

na zasadzie:

public class HttpResult<T>
{
    T ResultObject;

    public void setResultObject(String json)
    {
        ResultObject = new Gson.??????
    }
}

Chciałbym mógł zrobić coś takiego:

HttpResult<MojaKlasa> result = new HttpResult<MojaKlasa>();
result.setResultObject("{x:3,y:5}");
int x = result.ResultObject.x;

Jak powinna wyglądać deserializacja w metodzie setResultObject()?

0
 Gson gson = new GsonBuilder().create();
            ResultObject resultObject = gson.fromJson(reader, ResultObject.class);
            System.out.println(resultObject);

http://www.javacreed.com/simple-gson-example/

0

może opakuj sobie to tak:

import com.google.gson.Gson;

public class MyJsonConverter<T> {

    private static final Gson gson = new Gson();
    private final Class<T> type;

    private MyJsonConverter(Class<T> clazz) {
        this.type = clazz;
    }

    public static <T> MyJsonConverter<T> convert(Class<T> clazz) {
        return new MyJsonConverter<>(clazz);
    }

    public T fromJson(String json) {
        return gson.fromJson(json, type);
    }

    public String toJson(T obj) {
        return gson.toJson(obj);
    }
}
0

@panryz: chyba nie rozumiesz o co pytam. T.class nie działa ;P
@karolinaa: dzięki, ale chyba musiałbym tu podać w pewnym momencie tą klasę (w konstruktorze MyJsonConverter).
Da się tego uniknąć?

0

Dzięki za odpowiedzi.

Nie wiem czy dobrze kombinuje (zaczynam zabawę z Javą).
Chce napisać swojego wrappera na AsyncTaska do odpalania JSONowych requestów i zwrotnie dostawać w metodzie callbacka gotowy obiekt HttpResult<TypZwracanyPrzezWebservice> żeby tego ciągle nie parsować w callbacku OnResponse(String json).
Czyli mieć coś takiego: OnResponse(HttpResult<TypZwracanyPrzezWebservice> result)
W obiekcie HttpResult zwrotnie dostawać gotową 'paczkę' - z kodem http (np. 200), czy Success, obiekt TypZwracanyPrzezWebservice (już sparsowany z tego co zwrócił WS), ewentualną treść błędu.

Udało mi się w końcu to zrobić na podstawie tego co podpowiedzieliście. Tzn. do konstruktora mojego wrappera przekazuje TypZwracanyPrzezWebservice.class, który sobie przechowuje celem późniejszego sparsowania JSONa.

Początkowo myślałem, że może da się dokonać parsowania na podstawie samego typu generycznego T, ale chyba jest to niemożliwe/bez sensu ;)

Ostatecznie robie coś na zasadzie:

new OdpalWS<TypZwracanyPrzezWebservice>("http://ws/metoda", TypZwracanyPrzezWebservice.class)
{
    //...
    @Override
    public void OnResponse(HttpResult<TypZwracanyPrzezWebservice> result)
    {
        TypZwracanyPrzezWebservice zwrotka = result.ResultObject;     //   - o to mi docelowo chodziło, czyli nie JSON
        String zwrotkaJson = result.ResultJson;
    }
}

Dzięki, pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1