Чому GSON використовує ТІЛЬКИ поля (приватні, загальнодоступні, захищені)? Чи є спосіб сказати GSON використовувати лише геттери та сеттери?
Відповіді:
Взагалі кажучи, коли ви серіалізуєте / десеріалізуєте об'єкт, ви робите це, щоб у підсумку отримати точну копію стану об'єкта; Таким чином, ви, як правило, хочете обійти інкапсуляцію, зазвичай бажану в конструкції ОО. Якщо ви не обійдете інкапсуляцію, можливо, не вдасться отримати в результаті об'єкт, який має такий самий стан після десериалізації, як і до серіалізації. Крім того, розглянемо випадок, коли ви не хочете надавати установку для певної властивості. Як повинна діяти серіалізація / десериалізація, якщо ви працюєте з геттерами та сеттерами?
transientщоб вони не були серіалізовані, а перераховані за запитом.
Чи є спосіб сказати GSON використовувати лише геттери та сеттери?
Ще ні.
[T] ось хороші аргументи для підтримки властивостей. Ми маємо намір вдосконалити Gson в останній версії для підтримки властивостей як альтернативного відображення для вказівки полів Json. На даний момент Gson базується на полях.
Можна виправити Gson, щоб використовувати геттери .
Нечіткий контур того, як це працює в нашому додатку, полягає в тому, що ми маємо багато TypeAdapterреалізацій - деякі для конкретних ціннісних об’єктів, а інші для об’єктів у стилі bean, де ми знаємо, що логіка JavaBeans буде працювати. Потім ми затискаємо все це на GsonBuilderперед тим, як створити Gsonоб’єкт.
На жаль, GSON справді безглуздо обробляти такі типи Object[]. Ми в основному бачили це, коли намагалися створити об'єкт JSON для представлення параметрів методу. Вихідним шляхом для цього було створення власних TypeAdapterпримірників, що відображають методи. (Це означає, що в кінцевому підсумку ви використовуєте по одному Gsonекземпляру для методу, який ви маєте намір викликати ...)