Dies hängt mit einer früheren Frage zusammen, die ich hier zuvor gestellt habe
Ich versuche, denselben JSON zu analysieren, aber jetzt habe ich meine Klassen ein wenig geändert.
{
"lower": 20,
"upper": 40,
"delimiter": " ",
"scope": ["${title}"]
}
Meine Klasse sieht jetzt so aus:
public class TruncateElement {
private int lower;
private int upper;
private String delimiter;
private List<AttributeScope> scope;
// getters and setters
}
public enum AttributeScope {
TITLE("${title}"),
DESCRIPTION("${description}"),
private String scope;
AttributeScope(String scope) {
this.scope = scope;
}
public String getScope() {
return this.scope;
}
}
Dieser Code löst eine Ausnahme aus.
com.google.gson.JsonParseException: The JsonDeserializer EnumTypeAdapter failed to deserialized json object "${title}" given the type class com.amazon.seo.attribute.template.parse.data.AttributeScope
at
Die Ausnahme ist verständlich, da GSON gemäß der Lösung meiner vorherigen Frage erwartet, dass die Enum-Objekte tatsächlich als erstellt werden
${title}("${title}"),
${description}("${description}");
Aber da dies syntaktisch unmöglich ist, was sind die empfohlenen Lösungen, Problemumgehungen?
"1"
zum Beispiel tatsächlich statt einfach1
...SerializedName
wird standardmäßig die Aufzählung verwendetnull
. Das Standardverhalten eines unbekannten Status kann in einer Wrapper-Klasse behandelt werden. Wenn Sie jedoch eine andere Darstellung für "unbekannt"null
benötigen, müssen Sie einen benutzerdefinierten Deserializer oder Typadapter schreiben.Anmerkung verwenden
@SerializedName
:quelle
Mit GSON Version 2.2.2 kann enum problemlos gemarshallt und nicht gemarshallt werden.
quelle
Das folgende Snippet beseitigt die Notwendigkeit einer expliziten
Gson.registerTypeAdapter(...)
Verwendung der@JsonAdapter(class)
Annotation, die seit Gson 2.3 verfügbar ist (siehe Kommentar pm_labs ).quelle
Wenn Sie den Ordnungswert der Enum wirklich verwenden möchten, können Sie eine Typadapterfactory registrieren, um die Standardfactory von Gson zu überschreiben.
Dann registrieren Sie einfach die Fabrik.
quelle
Verwenden Sie diese Methode
quelle