Pomyślnie zacząłem używać GSON do serializowania i dekerealizacji hierarchii obiektów w mojej aplikacji Android.Kończenie budowy obiektu po deserializacji GSON
Niektóre obiekty są serializowane mają elementy, które muszę oznaczyć jako transient
(lub w inny sposób użyć alternatywnych adnotacji GSON, aby zapobiec ich serializacji), ponieważ są one odniesieniami do obiektów, których nie chcę serializować jako części wyjściowego JSON strunowy. Odwołania te dotyczą obiektów, które muszą być oddzielnie konstruowane w inny sposób.
Gdy struktura jest ponownie szeregowana z powrotem do obiektów Java, w pewnym momencie muszę wypełnić te odniesienia. Mogłem to łatwo zrobić, używając serii metod typu setXXX()
, ale do tego czasu obiekty te są w stanie niepełnym. Zastanawiam się więc, czy istnieje bardziej zdecydowane podejście do tego.
Sposoby myślałem tak daleko:
Czy obiekty rzucić
RuntimeException
(lub coś bardziej odpowiednie), jeżeli są one w stanie niekompletnym; to znaczy, jeśli poproszono ich o wykonanie pracy, gdy nie uruchomiono metody inicjalizacji.Rozdziel dane serializowanych bitów na osobny obiekt modelu danych. Innymi słowy, usuń rzeczy, których nie można serializować. Po dekrealizacji serialu GSON, buduj moje "prawdziwe" obiekty, używając tych obiektów danych w ich składzie. Wydaje się to pogarszać wygodę korzystania z GSON w pewien sposób.
Napisz niestandardowy deserializator dla GSON, aby obsłużyć specjalne tworzenie tych obiektów.
Wielkie dzięki. Myślę, że powinienem wziąć to drugie podejście, ponieważ innym problemem jest to, że moje wyjście JSON, które mam obecnie, jest bardzo ściśle powiązane z rzeczywistą implementacją klasy, i jestem również zaniepokojony wersjonowaniem (mogłoby to być kłopotliwe, gdyby plik JSON był ładowany do nowszej aplikacji vesion, gdzie zmieniły się struktury klasowe). Odwzorowanie klas aplikacji na drzewie klas "modelowych" w celu zachowania trwałości wydaje się być dobrym sposobem na rozwiązanie tego problemu.Głupie pytanie, ale jakiej terminologii używałbyś, aby odróżnić prawdziwą klasę pracującą od klasy modelu danych? – Trevor
Może ViewModel lub PersistenceModel lub SerializedModel, lub JsonModel, lub IntegrationModel, lub ServiceModel, lub coś innego. –