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