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