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?
Odpowiedzi:
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.
Czy istnieje sposób, aby powiedzieć GSON, aby używał tylko metod pobierających i ustawiających?
Jeszcze nie.
[T] tutaj są również dobre argumenty przemawiające za właściwościami. Zamierzamy ulepszyć Gson w ostatniej wersji, aby obsługiwać właściwości jako alternatywne mapowanie do wskazywania pól Json. Na razie Gson jest oparty na polach.
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 a GsonBuilder
przed utworzeniem Gson
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 niestandardowych TypeAdapter
instancji, które odzwierciedlają metody. (Oznacza to, że w końcu używasz jednej Gson
instancji na metodę, którą zamierzasz wywołać ...)