У меня есть enum:
enum Type {
LIVE, UPCOMING, REPLAY
}
И немного JSON:
{
"type": "live"
}
И класс:
class Event {
Type type;
}
Когда я пытаюсь десериализовать JSONиспользуя GSON, я получаю null
для поля типа Event
, поскольку регистр поля типа в JSON не совпадает с регистром перечисления.
Events events = new Gson().fromJson(json, Event.class);
Если я изменяю перечисление назатем все работает нормально:
enum Type {
live, upcoming, replay
}
Однако я хотел бы оставить константы перечисления в верхнем регистре.
Я предполагаю, что мне нужно написать адаптер, но убежищеНе нашел ни одной хорошей документации или примеров.
Какое лучшее решение?
Редактировать:
Мне удалось заставить работать JsonDeserializer.Есть ли более общий способ написать это, хотя было бы неудачно писать это каждый раз, когда есть несоответствие регистра между значениями перечисления и строками JSON.
protected static class TypeCaseInsensitiveEnumAdapter implements JsonDeserializer<Type> {
@Override
public Type deserialize(JsonElement json, java.lang.reflect.Type classOfT, JsonDeserializationContext context)
throws JsonParseException {
return Type.valueOf(json.getAsString().toUpperCase());
}
}