我有一个枚举:
enum Type {
LIVE, UPCOMING, REPLAY
}
还有一些 JSON:
{
"type": "live"
}
还有一个类:
class Event {
Type type;
}
当我尝试使用GSON反序列化JSON时,由于JSON中的类型字段大小写不匹配枚举类型,Event
类型字段返回null
。
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());
}
}
LOWER_CASE_WITH_UNDERSCORES
字段命名策略的功能... - friederbluemle