Gson - deserializacja

Odpowiedz Nowy wątek
2015-07-26 20:20
Biały Lew
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()?

Pozostało 580 znaków

2015-07-26 20:24
0
 Gson gson = new GsonBuilder().create();
            ResultObject resultObject = gson.fromJson(reader, ResultObject.class);
            System.out.println(resultObject);

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

edytowany 1x, ostatnio: panryz, 2015-07-26 20:32

Pozostało 580 znaków

2015-07-26 20:30
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);
    }
}

PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!

Pozostało 580 znaków

2015-07-26 20:42
Biały Lew
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ąć?

Pokaż pozostałe 2 komentarze
jak refleksja to nie java ino guava - niezdecydowany 2015-07-26 21:44
zapomniałem że Wy gorole nie rozumienie ludzkiej mowy <trolololo> - niezdecydowany 2015-07-26 21:48
ady to pewnie też obce słowo :D - panryz 2015-07-26 21:51
a już rozumiem sry xd ;p . takie proste słówka to rozumiem już bez przesady - karolinaa 2015-07-26 21:51

Pozostało 580 znaków

2015-07-27 12:11
Biały Lew
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

btw: looknij sobie na springa. spring rest template czy jakoś tak - karolinaa 2015-07-27 22:00

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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