Почему GSON использует поля, а не геттеры/сеттеры?


Почему GSON использует только поля (частные, публичные, защищенные)? Есть ли способ сказать GSON использовать только геттеры и сеттеры?

4 66

4 ответа:

вообще говоря, когда вы сериализуете / десериализуете объект, вы делаете это, чтобы получить точную копию состояния объекта; как таковой, вы обычно хотите обойти инкапсуляцию, обычно желаемую в дизайне OO. Если вы не обходите инкапсуляцию, может оказаться невозможным получить объект, который имеет точно такое же состояние после десериализации, как и до сериализации. Кроме того, рассмотрим случай, когда вы не хотите предоставить сеттер определенное свойство. Как должна действовать сериализация / десериализация, если вы работаете через геттеры и сеттеры?

есть ли способ сказать GSON использовать только геттеры и сеттеры?

пока нет.

С дизайн doc:

[T]вот хорошие аргументы для поддержки свойств. Мы намерены улучшить Gson в последней версии для поддержки свойств в качестве альтернативного отображения для указания полей Json. На данный момент Gson основан на полях.

можно залатать Gson до использовать геттеры.

расплывчатые очертания, как это работает в нашем приложении является то, что у нас много TypeAdapter реализации-некоторые для конкретных объектов, подобных значению, а некоторые для объектов в стиле bean, где мы знаем, что логика JavaBeans будет работать. Затем мы заклиниваем все это на GsonBuilder перед созданием