使用自定义序列化使用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}

}

}

两个问题:

  1. 为什么printSerialized(map)打印{"foo":true}而不是{"bar":true}
  2. 我该如何打印{"bar":true}

回答:

Gson对Map密钥使用了专用的序列化器。默认情况下,它使用将toString()要用作键的对象的。对于enum类型,基本上就是enum常量的名称。@SerializedName,默认为enum类型,仅当将序列化为enumJSON值(对名称除外)时才使用。

使用GsonBuilder#enableComplexMapKeySerialization来构建你的Gson实例。

private static Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create();

以上是 使用自定义序列化使用Gson序列化枚举映射 的全部内容, 来源链接: utcz.com/qa/405466.html

回到顶部