遵循在使用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 2.2.4序列化和反序列化一个简单的枚举? 问题答案: 根据 GsonAPI文档 ,Gson提供了的默认序列化/反序列化,因此基本上,应使用标准和方法(与其他类型一样)对序列化和反序列化。
如何用gson 2.2.4序列化和反序列化像这样的简单枚举?
我需要序列化/反序列化特定枚举: 我有个例外: 我如何通过GSON序列化/反序列化它?
问题内容: 我有一个下面的枚举: 我用控制器()返回枚举数组,Spring将其序列化为以下json字符串: 强迫Jackson像POJO一样序列化枚举的最佳方法是什么?例如: 我使用了不同的注释,但无法获得这样的结果。 问题答案: 终于我找到了解决方案。 我必须用注释枚举并实现自定义序列化程序:
问题内容: 我在使用Gson解析JSON响应时遇到问题。 JSON字串: 我有这两个课程: 但是当使用Gson解析这个时我有一个异常。我知道这是因为响应数组的第一个元素不是对象,而是整数。 所以问题是,我能以某种方式解决它吗? 问题答案: 您必须编写一个 自定义反序列化器 。我会做这样的事情: 首先,您需要包括一个新的类,而不是已有的两个类: 然后,您需要一个自定义解串器,类似于以下内容: 然后,
我有一个不能用Gson正确序列化的类(类只是name和HashMap),所以我编写了一个自定义序列化程序来从HashMap中打印名称和键值对。 此外,这是实际打印的内容,序列化整个对象并不像我所期望的那样工作,也不只是直接打印对象。 任何帮助都将不胜感激。