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