2013-05-24 8 views

Antwort

18

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.

+8

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

+11

Sie können Annotation '@ SerializedName' für enum hinzufügen. – ViliusK

+7

@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

130

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; 
    } 

} 
+2

Hinweis: Dies funktioniert nicht mit älteren Versionen von GSON. Es funktioniert mit Version 2.1 und höher. –

+5

Er fragte nach Version 2.2.4, also ja –

+0

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

1

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); 
    } 
} 
+2

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

Verwandte Themen