82 votes

Pourquoi GSON utilise-t-il des champs et non des getters/setters ?

Pourquoi le GSON utilise-t-il UNIQUEMENT champs (private, public, protected) ? Existe-t-il un moyen d'indiquer à GSON de n'utiliser que des getters et setters ?

100voto

Chris Shaffer Points 18066

En général, lorsque vous sérialisez/désérialisez un objet, vous le faites pour obtenir une copie exacte de l'état de l'objet. En tant que tel, vous voulez généralement contourner l'encapsulation normalement souhaitée dans une conception OO. Si vous ne contournez pas l'encapsulation, il se peut qu'il ne soit pas possible d'obtenir un objet qui a exactement le même état après la désérialisation qu'avant la sérialisation. De plus, considérez le cas où vous ne voulez pas fournir un setter pour une propriété particulière. Comment la sérialisation/désérialisation doit-elle agir si vous travaillez à travers les getters et setters ?

26voto

Programmer Bruce Points 16306

Existe-t-il un moyen d'indiquer à GSON de n'utiliser que des getters et des setters ?

Pas encore.

De le document de conception :

[Il existe également de bons arguments en faveur des propriétés. Nous avons l'intention d'améliorer Gson dans une version ultérieure afin de prendre en charge les propriétés en tant que mappage alternatif pour indiquer les champs Json. Pour l'instant, Gson est basé sur les champs.

6voto

Jimmy Points 21

Il est possible de patcher Gson pour utiliser des récupérateurs .

0voto

Trejkaz Points 1928

Le vague aperçu de comment cela fonctionne dans notre application est que nous avons beaucoup de TypeAdapter certaines pour des objets spécifiques de type valeur et d'autres pour des objets de type haricot, pour lesquels nous savons que la logique JavaBeans fonctionnera. Nous bloquons ensuite tous ces éléments dans un GsonBuilder avant de créer le Gson objet.

Malheureusement, GSON est vraiment nul pour gérer des types comme Object[] . Nous avons surtout vu cela lorsque nous avons essayé de créer un objet JSON pour représenter les paramètres des méthodes. La solution de contournement consistait à créer des objets JSON personnalisés. TypeAdapter qui reflètent les méthodes. (Cela signifie que vous finissez par utiliser une seule Gson instance par méthode que vous avez l'intention d'appeler...)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X