[英]Serializing a map of enums with Gson with custom serialization
按照使用GSON解析JSON時使用枚舉的建議,我嘗試使用Gson序列化其鍵是enum
的映射。
考慮以下課程:
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)
print {"foo":true}
而不是{"bar":true}
? {"bar":true}
? Gson為Map
鍵使用專用的序列化器。 默認情況下,這使用將要用作鍵的對象的toString()
。 對於enum
類型,它基本上是enum
常量的名稱。 默認情況下,對於enum
類型, @SerializedName
僅在將enum
序列化為JSON值(除了對名稱)時使用。
使用GsonBuilder#enableComplexMapKeySerialization
來構建您的Gson
實例。
private static Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.