Dlaczego GSON używa TYLKO pól (prywatnych, publicznych, chronionych)? Czy istnieje sposób, aby powiedzieć GSON, aby używał tylko metod pobierających i ustawiających?
79
Ogólnie mówiąc, gdy serializujesz / deserializujesz obiekt, robisz to, aby otrzymać dokładną kopię stanu obiektu; W związku z tym na ogół chcesz obejść hermetyzację normalnie pożądaną w projekcie OO. Jeśli nie ominiesz hermetyzacji, może nie być możliwe uzyskanie obiektu, który ma dokładnie taki sam stan po deserializacji, jak przed serializacją. Dodatkowo weź pod uwagę przypadek, w którym nie chcesz podawać metody ustawiającej dla określonej właściwości. Jak powinna działać serializacja / deserializacja, jeśli pracujesz przez metody pobierające i ustawiające?
transient
aby nie były serializowane i przeliczane na żądanie.Jeszcze nie.
Z dokumentu projektowego :
źródło
Możliwe jest zaktualizowanie Gson, aby używał getterów .
źródło
Ogólny zarys tego, jak to działa w naszej aplikacji, jest taki, że mamy wiele
TypeAdapter
implementacji - niektóre dla określonych obiektów typu wartości, a niektóre dla obiektów w stylu fasoli, w przypadku których wiemy, że logika JavaBeans będzie działać. Następnie jamujemy je wszystkie na aGsonBuilder
przed utworzeniemGson
obiektu.Niestety, GSON jest naprawdę kiepski w obsłudze typów takich jak
Object[]
. Widzieliśmy to głównie podczas próby utworzenia obiektu JSON do reprezentowania parametrów metody. Rozwiązaniem było utworzenie niestandardowychTypeAdapter
instancji, które odzwierciedlają metody. (Oznacza to, że w końcu używasz jednejGson
instancji na metodę, którą zamierzasz wywołać ...)źródło