当前位置: 首页 > 知识库问答 >
问题:

更改Jackson中的默认序列化行为

蒋向笛
2023-03-14
SimpleModule module = new SimpleModule("module", new Version(0, 1, 0, "alpha", null, null));
module.addSerializer(Entry.class, new EntryJsonSerializer());
module.addSerializer(Map.class, new MapJsonSerializer());
module.addSerializer(Object.class, new DefaultJsonSerializer());
this.registerModule(module);

但是,我发现该模块将使用DefaultJsonSerializer序列化Map和Entry对象(因为它们也是Object对象)。

如何更改默认序列化行为,同时确保条目和映射对象按预期序列化?

共有1个答案

申宜
2023-03-14

问题很可能是实际类型的值(例如,String)被用于定位序列化器。

一个解决方案是注册值类型的序列化器(如果您知道它们)。

或者,您可以强制使用静态类型;这将使序列化程序查找使用声明的(静态)类型,而不是实际的运行时类型。这可以通过以下方式实现:

objectMapper.enable(MapperFeature.USE_STATIC_TYPING);
 类似资料:
  • 问题内容: 无论如何,是否可以在WCF中更改DateTime的默认JSON序列化/反序列化? 目前,DateTime已序列化为该格式,应该没问题,但是当我的服务器不在UTC中时(我无法更改),我遇到了问题。 此服务正在处理的所有日期/时间数据均为UTC格式。服务器处于UTC时一切正常。但是,暂存/生产环境设置为GMT + 1(Paris),并且序列化程序假定日期/时间在GMT + 1中,而完全忽略

  • 我尝试使用以下代码反序列化API中接收的JSON对象: 我的类使用Lombok生成构造函数、getter和setter,如下所示: 这两个属性都应该是可选的,如果没有提供,则使用类定义中指定的默认值。但是,如果我现在尝试反序列化JSON 字段为。根据我的理解,以及我找到的所有示例代码,应该是一个空列表。 编辑:不是重复的,因为我使用的是没有选项的Lombok

  • 问题内容: 我有一个将大型JSON对象返回到jQueryFlot的控制器,我想知道用更快的东西(例如ServiceStack.Text中的东西)替换默认JavaScriptSerializer会多么容易。 如果我可以使用DependencyResolver来更改此类内容,那将是很好的选择,但是我想,如果绝对可以解决所有问题,它可能会变得很慢。 问题答案: 最好的选择是从JsonResult类继承并

  • 我想创建一个自定义序列化程序,它只做一点点工作,然后将其余部分留给默认序列化。 例如: 通过为聚合对象创建其他自定义序列化器的想法,这些对象根据“特殊”属性值表现不同。然而,上面的代码不起作用,因为它毫不奇怪地进入了无限递归。 一旦我设置了属性,有没有办法告诉jackson使用默认序列化?我真的不想像许多自定义序列化程序那样枚举所有属性,因为该类相当复杂,并且我不想每次更改该类时都必须对序列化程序

  • 像这样: 我该怎么办?

  • 我有一个带有lombok注释的POJO,我的JSON通过Jackson将它反序列化,如下所示: 当jackson试图反序列化仅列出一个响应时 缺少什么来确保所有属性要么包含反序列化JSON中的相应值,要么包含默认分配值的空列表? -更新-这不是问题,直到我从Spring 1.3.5升级到1.4.2,这也将我的Jackson版本从2.6.6升级到2.8.4