Comment implémenter TypeAdapterFactory dans Gson?
Comment puis-je mettre en œuvre le type de TypeAdapterFactory dans Gson?
La méthode principale de créer est générique. Pourquoi?
La méthode d'enregistrement registerTypeAdapterFactory() ne reçoit pas de type d'un type d'argument. Alors, comment est - Gson
savoir quelles classes sont traitées par l'usine?
Dois-je mettre en œuvre une usine pour plusieurs classes, ou puis-je mettre en œuvre pour de nombreuses classes?
Si j'mettre en œuvre une usine pour plusieurs classes, alors que dois-je retourner en cas de hors-domaine type d'argument?
source d'informationauteur Suzan Cioc | 2014-03-10
Vous devez vous connecter pour publier un commentaire.
Lorsque vous vous inscrivez à un type ordinaire de l'adaptateur (
GsonBuilder.registerTypeAdapter
), il ne génère un type d'adaptateur spécifique à chaque classe. Par exemple:Si vous avez fait cela, alors
Gson
sera pas utiliser votremyTypeAdapterObject
il utilisera le type par défaut de l'adaptateur pourObject
.Alors, comment pouvez-vous faire un adaptateur type d'objet qui peut convertir TOUS les
Animal
sous-classe Json? Créer unTypeAdapterFactory
! L'usine peut correspondre en utilisant le type générique et leTypeToken
classe. Vous devez retourner la valeur null si votreTypeAdapterFactory
ne sais pas comment gérer un objet de ce type.L'autre chose
TypeAdapterFactory
peut être utilisé pour est que vous ne pouvez pas la CHAÎNE d'adaptateurs de toute autre manière. Par défaut, Gson ne passe pas votreGson
exemple dans leread
ouwrite
méthodes deTypeAdapter
. Donc, si vous avez un objet comme:Il n'existe aucun moyen d'écrire votre
TypeAdapter<MyOuterClass>
qui sait comment utiliser votreTypeAdapter<MyInnerClass>
sans l'aide de laTypeAdapterFactory
. LeTypeAdapterFactory.create
méthode NE passer à laGson
exemple, qui vous permet d'apprendre à votreTypeAdapter<MyOuterClass>
comment sérialiser l'MyInnerClass
champ.Généralement, voici un bon moyen de commencer à écrire une implémentation d'un
TypeAdapterFactory
: