GSON 不区分大小写的枚举反序列化
2022-09-01 05:30:32
我有一个枚举:
enum Type {
LIVE, UPCOMING, REPLAY
}
还有一些JSON:
{
"type": "live"
}
和一个类:
class Event {
Type type;
}
当我尝试使用GSON反序列化JSON时,我收到了类型字段,因为JSON中类型字段的大小写与枚举的大小写不匹配。null
Event
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());
}
}