Wie kann ich eine einfache enum wie diese mit gson 2.2.4 serialisieren und deserialisieren?serialize und deserialize enum mit Gson
public enum Color {
RED, BLUE, YELLOW;
}
Wie kann ich eine einfache enum wie diese mit gson 2.2.4 serialisieren und deserialisieren?serialize und deserialize enum mit Gson
public enum Color {
RED, BLUE, YELLOW;
}
Nach Gson API documentation stellt Gson Standard Serialisierung/Deserialisierung von Enum
, so dass im Grunde sollte sie serialisiert werden und deserialisiert die Standard toJson
und fromJson
Methoden verwendet, wie bei jedem anderen Typ.
Sie können dies versuchen. obwohl
import com.google.gson.annotations.SerializedName;
public enum Color {
@SerializedName("0")
RED (0),
@SerializedName("1")
BLUE (1),
@SerializedName("2")
YELLOW (2);
private final int value;
public int getValue() {
return value;
}
private Color(int value) {
this.value = value;
}
}
Hinweis: Dies funktioniert nicht mit älteren Versionen von GSON. Es funktioniert mit Version 2.1 und höher. –
Er fragte nach Version 2.2.4, also ja –
Das ist ein wirklich toller Ansatz. Ich benutze es oft, und ich denke, dass Benutzer in neueren Versionen von GSON auf die Verwendung dieses Ansatzes zurückgreifen sollten, da es übersichtlich ist und keinen komplexen benutzerdefinierten Serialisierungs-/Deserialisierungscode erfordert. – jwir3
Das funktioniert auch gut, weiß nicht, von welcher Version von Gson:
public enum OrderLineTimeRegistrationStatus {
None(0), Started(1), Paused(2);
private int value;
private OrderLineTimeRegistrationStatus(int value)
{
this.value=value;
}
public int getValue()
{
return(value);
}
}
Ich fürchte, es funktioniert nicht. Verwenden von Gson 2.8.0. Wie könnte es überhaupt funktionieren? Gson ist schlau, aber nicht so schlau. – waste
standardmäßig Gson serialisiert und deserialisiert durch den Namen des Enum anstelle des Ordnungswert verwendet wird. Gibt es eine Möglichkeit, einen Serializer und einen Deserializer einzurichten, um alle Enums nach ihren Ordinalwerten zu behandeln? – Churro
Sie können Annotation '@ SerializedName' für enum hinzufügen. – ViliusK
@ViliusK, die meine Enumeration als String.valueOf (ordinal) serialisieren wird, gibt es eine ähnliche Annotation oder Möglichkeit, meine serialisierte enum zu einem int zu machen? z.B. "Farbe": 1 ist was ich will, nicht "Farbe": "1". (Beachten Sie die doppelten Zitate um 1) – Behnam