Gson ist eine große Bibliothek - es funktioniert gut. Manchmal habe ich benutzerdefinierte Anforderungen und kann TypeAdapters und TypeAdaptorFactories erstellen und registrieren - und das funktioniert auch gut.Hinzufügen eines Objekts mit einem benutzerdefinierten Typadapter, Jsonwriter in Gson
Was mich jedoch verwirrt, ist, wie man wieder in json Serialisierung delegieren ... Meistens brauche ich das für Sammlungen, aber um den Punkt zu veranschaulichen - nehme an, ich hätte eine Paarklasse, die Gson würde offensichtlich glücklich serialisieren, aber aus irgendeinem Grund brauchte ich meinen eigenen benutzerdefinierten Serialisierer. Nun ja ... wenn mein Paar ist
public class Pair
{
public final Object First;
public final Object Second;
public Pair(Object first, Object second) {this.first = first; this.second = second};
}
Wenn ich eine Art Adapter für diese geschrieben - Sie würden wollen die Schreibfunktion wie folgt aussehen:
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();
}
So können Sie das Problem sehen - Ich habe keine Ahnung die Art der ersten und zweiten, noch wie sie serialisiert sind. Ich kann gson.toJson verwenden, um zuerst und die zweite zu serialisieren - aber wenn ich sie als Zeichenkette dem Schreiber hinzufüge, werden sie maskiert. Es gibt eine gson.tojson-Funktion, die einen Wert und einen Schreiber nimmt - aber es braucht auch einen Typenkopf - den ich nicht habe. Ich habe den Eindruck, dass ich irgendwo einen anderen Typ-Adapter haben soll - aber wenn ich nur eine Liste von Objekten habe ... Woher bekomme ich das? bekomme ich nur den Adapter für das Objekt?
Ich bin ein wenig verwirrt? Sicherlich ist dies der häufigste Anwendungsfall? Die meisten benutzerdefinierten Serializer werden für eine seltsame Liste von T oder Baum von T oder etwas sein, und Sie wissen wirklich nicht, was in der Liste ist, darüber hinaus erbt es von T ... so müssen Sie in der Lage sein, die zurück zu delegieren Serialisierung in irgendeiner Weise?
Wie auch immer - wenn jemand mir sagen kann, wie man die obige Funktion schreibt, würde ich es wirklich schätzen!
Vielen Dank - werden Sie das geben –