私は列挙型を持っています:
enum Type {
LIVE, UPCOMING, REPLAY
}
そしていくつかの JSON:
{
"type": "live"
}
そしてクラス:
class Event {
Type type;
}
JSON を逆シリアル化しようとすると、GSON を使用して type フィールドを受信null
しEvent
ます。これは、JSON の type フィールドの大文字と小文字が enum の大文字と小文字が一致しないためです。
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());
}
}