Почему GSON использует ТОЛЬКО поля (частные, общедоступные, защищенные)? Есть ли способ указать GSON использовать только геттеры и сеттеры?
Почему GSON использует поля, а не геттеры / сеттеры?
Ответы (4)
Вообще говоря, когда вы сериализуете / десериализуете объект, вы делаете это для получения точной копии состояния объекта; Таким образом, вы обычно хотите обойти инкапсуляцию, обычно желаемую в объектно-ориентированном дизайне. Если вы не обойдете инкапсуляцию, возможно, не удастся получить объект, который после десериализации будет иметь такое же состояние, как и до сериализации. Кроме того, рассмотрите случай, когда вы не хотите предоставлять сеттер для определенного свойства. Как должна действовать сериализация / десериализация, если вы работаете через геттеры и сеттеры?
transient
, чтобы они не сериализовались и не пересчитывались по запросу.
- person BoffinBrain; 06.02.2013
null
.
- person BlueWizard; 11.12.2016
Есть ли способ указать GSON использовать только геттеры и сеттеры?
Еще нет.
[T] здесь также есть хорошие аргументы в пользу поддержки свойств. Мы намерены улучшить Gson в последней версии для поддержки свойств в качестве альтернативного сопоставления для указания полей Json. На данный момент Gson основан на полях.
Можно исправить Gson для использования геттеров.
Расплывчатый план того, как это работает в нашем приложении, заключается в том, что у нас есть много TypeAdapter
реализаций - некоторые для конкретных объектов, подобных значению, а некоторые для объектов в стиле bean, где мы знаем, что логика JavaBeans будет работать. Затем мы вставляем все это в GsonBuilder
перед созданием объекта Gson
.
К сожалению, GSON действительно плохо справляется с такими типами, как Object[]
. В основном мы видели это, когда пытались создать объект JSON для представления параметров метода. Чтобы решить эту проблему, нужно создать собственные TypeAdapter
экземпляры, отражающие методы. (Это означает, что вы в конечном итоге используете один Gson
экземпляр для каждого метода, который собираетесь вызвать ...)