Почему GSON использует поля, а не геттеры/сеттеры?
Почему GSON использует только поля (частные, публичные, защищенные)? Есть ли способ сказать GSON использовать только геттеры и сеттеры?
4 ответа:
вообще говоря, когда вы сериализуете / десериализуете объект, вы делаете это, чтобы получить точную копию состояния объекта; как таковой, вы обычно хотите обойти инкапсуляцию, обычно желаемую в дизайне OO. Если вы не обходите инкапсуляцию, может оказаться невозможным получить объект, который имеет точно такое же состояние после десериализации, как и до сериализации. Кроме того, рассмотрим случай, когда вы не хотите предоставить сеттер определенное свойство. Как должна действовать сериализация / десериализация, если вы работаете через геттеры и сеттеры?
есть ли способ сказать GSON использовать только геттеры и сеттеры?
пока нет.
С дизайн doc:
[T]вот хорошие аргументы для поддержки свойств. Мы намерены улучшить Gson в последней версии для поддержки свойств в качестве альтернативного отображения для указания полей Json. На данный момент Gson основан на полях.
можно залатать Gson до использовать геттеры.
расплывчатые очертания, как это работает в нашем приложении является то, что у нас много
TypeAdapter
реализации-некоторые для конкретных объектов, подобных значению, а некоторые для объектов в стиле bean, где мы знаем, что логика JavaBeans будет работать. Затем мы заклиниваем все это наGsonBuilder
перед созданием