使用自定义序列化使用Gson序列化枚举映射
遵循在使用GSON解析JSON时使用枚举中的建议,我正在尝试序列化其键是enum
使用Gson
的映射。
考虑以下类别:
public class Main { public enum Enum { @SerializedName("bar") foo }
private static Gson gson = new Gson();
private static void printSerialized(Object o) {
System.out.println(gson.toJson(o));
}
public static void main(String[] args) {
printSerialized(Enum.foo); // prints "bar"
List<Enum> list = Arrays.asList(Enum.foo);
printSerialized(list); // prints ["bar"]
Map<Enum, Boolean> map = new HashMap<>();
map.put(Enum.foo, true);
printSerialized(map); // prints {"foo":true}
}
}
两个问题:
- 为什么
printSerialized(map)
打印{"foo":true}
而不是{"bar":true}
? - 我该如何打印
{"bar":true}
?
回答:
Gson对Map
密钥使用了专用的序列化器。默认情况下,它使用将toString()
要用作键的对象的。对于enum
类型,基本上就是enum
常量的名称。@SerializedName
,默认为enum
类型,仅当将序列化为enum
JSON值(对名称除外)时才使用。
使用GsonBuilder#enableComplexMapKeySerialization
来构建你的Gson
实例。
private static Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
以上是 使用自定义序列化使用Gson序列化枚举映射 的全部内容, 来源链接: utcz.com/qa/405466.html