2015-03-15 3 views
8

Мне нужно вывести значения перечисления с помощью Gson, которые из-за ограничений клиента должны быть в нижнем регистре.Нижний регистр enum Gson

Например, CLOSE_FILE будет close_file.

Есть ли простой способ сделать это? Я посмотрел на создание класса, который реализует JsonSerializer, но похоже, что мне придется вручную сериализовать весь класс (что довольно сложно), так ли это?

ответ

14

Если у вас есть контроль над типом enum, аннотируйте его элементы @SerializedName и присвойте ему соответствующее сериализованное значение. Например,

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

Если вы не имеете контроля над enum, обеспечивают пользовательский TypeAdapter при создании Gson экземпляра. Например,

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(); 
Смежные вопросы