2015-03-15 13 views
8

Ho bisogno di generare valori di enum usando Gson che a causa delle limitazioni del client deve essere in minuscolo.Lower case enum Gson

Ad esempio CLOSE_FILE sarebbe close_file.

C'è un modo semplice per farlo? Ho cercato di creare una classe che implementa JsonSerializer ma sembra che avrei dovuto serializzare manualmente l'intera classe (che è piuttosto complessa) è questo il caso?

risposta

14

Se si dispone del controllo sul tipo enum, annotare i relativi membri con @SerializedName e assegnargli il valore serializzato appropriato. Ad esempio,

enum Action { 
    @SerializedName("close_file") 
    CLOSE_FILE; 
} 

Se non si ha il controllo sul enum, fornire una consuetudine TypeAdapter durante la creazione di un'istanza Gson. Ad esempio,

Gson gson = new GsonBuilder().registerTypeAdapter(Action.class, new TypeAdapter<Action>() { 

    @Override 
    public void write(JsonWriter out, Action value) throws IOException { 
     out.value(value.name().toLowerCase()); 
    } 

    @Override 
    public Action read(JsonReader in) throws IOException { 
     return Action.valueOf(in.nextString().toUpperCase()); 
    } 
}).create();