ajouter un objet en utilisant un customeadeadapter, jsonwriter dans gson
gson est une grande bibliothèque qu'il fonctionne. Parfois, j'ai des besoins personnalisés, et permet de faire et de s'inscrire TypeAdapters et TypeAdaptorFactories - et qui fonctionne bien aussi.
Ce qui me confond cependant, est de savoir comment délégué de retour dans la sérialisation json... la Plupart du temps j'en ai besoin pour les collections, mais pour illustrer ce point - supposons que j'avais une paire de classe, qui gson serait évidemment sérialiser heureusement, mais pour certaines raisons, j'ai besoin de mon propre sérialiseur. Eh bien... si ma paire est
public class Pair
{
public final Object First;
public final Object Second;
public Pair( Object first, Object second) {this.first = first; this.second = second};
}
Si j'ai écrit un adaptateur type de ce que vous ne voulez la fonction d'écriture ressemble à:
public void write( JsonWriter out, Pair pair )
{
out.beginObject();
out.name( "first");
out.value( pair.first ); //can't do this
out.name( "second");
out.value( pair.second); //or this
out.endObject();
}
De sorte que vous pouvez voir le problème - j'ai aucune idée de le type de la première et de la deuxième, ni la manière dont ils sont sérialisés. Je peux utiliser gson.la méthode toJson pour sérialiser première et de la deuxième, mais si je les ajouter en tant que chaîne de l'écrivain, ils seront échappés. Il y a un gson.la méthode tojson fonction qui prend une valeur et un écrivain - mais il prend également typetoken - je n'en ai pas. J'ai l'impression que je suis censé avoir un autre type de carte à partir de quelque part - mais quand j'ai une liste d'objets... où dois-je obtenir? dois-je seulement obtenir la carte pour objet?
Je suis un peu confus? Sûrement, c'est l'utilisation la plus courante de cas? La plupart des sérialiseurs sera pour une étrange liste de T ou de l'arbre de T ou de quelque chose, et vous ne sais vraiment pas ce qui est dans la liste, au-delà de qu'il hérite de T... si vous avez besoin d'être en mesure de déléguer l'arrière de la sérialisation d'une certaine façon?
De toute façon si quelqu'un peut me dire comment écrire la fonction ci-dessus, j'avais vraiment l'apprécier!
source d'informationauteur Darren Oakey
Vous devez vous connecter pour publier un commentaire.
Dans ce cas il vaut mieux utiliser un
JsonSerializer
par opposition à unTypeAdapter
pour la simple raison que les sérialiseurs avoir accès à leur sérialisation contexte:Ci-dessus un exemple de code illustre comment déléguer la sérialisation des objets visés à la marshaller. Le principal avantage de cette (à part éviter compliqué de solutions), c'est que vous pouvez toujours profiter d'un autre type d'adaptateurs et personnalisé sérialiseurs qui peut avoir été inscrit dans le contexte principal. À noter que l'inscription de sérialiseurs et adaptateurs à utiliser le même code:
Si vous trouvez que vous avez besoin de coller avec un adaptateur, vous pouvez utiliser un intégré à Gson proxy pour sérialiser la Paire propriétés pour vous, avec l'inconvénient que si vous perdez l'accès à la coutume des enregistrements que vous avez effectués sur le parent Gson proxy:
fait qui semblait travail - prise de l'adaptateur pour objet l'aide de la typeadaptorfactory de découvrir un "json" la méthode sur un objet, et ayant de l'entreposer à l'abri de l'adaptateur d'objet. Semble étonnamment complexe de ce qu'est une évidence de cas d'utilisation?
par exemple:
quelqu'un sait-il une meilleure façon de le faire?