HashMap<Test, List<Something>> map =
new HashMap<>();
class Test {
public Test(){}
public Test(String str){test = str;}
String test;
}
class Something {
public Something(){}
public Something(String str){something = str;}
String something;
}
List<Something> somelist = new ArrayList<Something>();
somelist.add(new Something("something1"));
somelist.add(new Something("something2"));
map.put(new Test("test1"), somelist);
{
"test.TestJsonClass$Test@15db9742": [
{
"string": "something1"
},
{
"string": "something2"
}
]
}
Gson gson = new GsonBuilder().setPrettyPrinting()
.registerTypeAdapter(Test.class, new JsonSerializer<Test>() {
public JsonElement serialize(Test arg0, Type arg1,
JsonSerializationContext arg2) {
return new JsonPrimitive(arg0.test);
}
}).registerTypeAdapter(Something.class, new JsonSerializer<Something>() {
@Override
public JsonElement serialize(Something arg0, Type arg1,
JsonSerializationContext arg2) {
return new JsonPrimitive(arg0.something);
}
}).create();
{
"test.TestJsonClass$Test@15db9742": [
"something1",
"something2"
]
}
如何使Gson正确序列化我的密钥?
我发现的最简单的方法似乎是在最初构建Gson对象时设置enableComplexMapKeySerialization()选项。
这迫使Gson使用标准规则序列化键,而不仅仅是调用toString()。然后,您可以根据需要添加自己的序列化/反序列化程序,或者让Gson处理它。
更多信息请参见
问题内容: 遵循在使用GSON解析JSON时使用枚举中的建议,我正在尝试序列化其键是使用Gson 的映射。 考虑以下类别: 两个问题: 为什么打印而不是? 我该如何打印? 问题答案: Gson对密钥使用了专用的序列化器。默认情况下,它使用将要用作键的对象的。对于类型,基本上就是常量的名称。,默认为类型,仅当将序列化为JSON值(对名称除外)时才使用。 使用来构建你的实例。
我想将包含另一个空值POJO的POJO序列化为JSON。 例如,给定: 连载之后,它看起来会是这样的 如果类的所有字段也为空,是否可以排除空对象?理想情况下,全局适用于每个对象,而无需编写自定义代码。
如果类的所有字段也为空,是否可以排除空对象?理想情况下,全局地用于每个对象,而无需编写自定义代码。
我有一个不能用Gson正确序列化的类(类只是name和HashMap),所以我编写了一个自定义序列化程序来从HashMap中打印名称和键值对。 此外,这是实际打印的内容,序列化整个对象并不像我所期望的那样工作,也不只是直接打印对象。 任何帮助都将不胜感激。
问题内容: 我有这个架构: 我想用Gson序列化Data对象,并得到类似的东西: 为此,我必须对学生部分使用自定义序列化程序,以便Gson仅打印学校的ID。但是对于学校来说,我必须有正常的序列化器。 我如何只用一个Gson对象就能完成所有工作? 问题答案: 您可以编写自定义序列化器,如下所示:
我将 Jackson 2.7.5 与 Jersey 2.25.1 配合使用。我正在尝试修复现有的生产代码,当它在JSON输入中获得意外字段时,它现在因“无法识别的PropertyException:无法识别的字段”而失败。 在研究这个问题时,我发现了几篇旧帖子(5年),建议各种修复方法与我当前的代码非常不同。我不太关注这些,因为它们是针对旧版本的Jackson/Jersey。最近的建议,包括泽西岛