Почему GSON использует поля, а не методы получения / установки? - PullRequest
71 голосов
/ 01 июня 2011

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

Ответы [ 4 ]

89 голосов
/ 01 июня 2011

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

24 голосов
/ 01 июня 2011

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

Еще нет.

С дизайн документа :

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

4 голосов
/ 18 июня 2011

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

0 голосов
/ 05 апреля 2013

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

К сожалению, GSON действительно дерьмо обрабатывает такие типы, как Object[].В основном мы видели это, когда пытались создать объект JSON для представления параметров метода.Обходным путем для этого было создание пользовательских TypeAdapter экземпляров, которые отражают методы.(Это означает, что вы в конечном итоге используете один Gson экземпляр для метода, который вы намереваетесь вызвать ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...