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

Jackson custom JsonSerializer-有条件地调用默认序列化程序

楚帅
2023-03-14

我想要的是有条件地为类的对象使用默认BeanSerializer:

class MyCustomSerializer extends StdSerializer<AbstractEntity> {

    public MyCustomSerializer() {
        super(AbstractEntity.class);
    }

    @Override
    public void serialize(AbstractEntity o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (someCondition()) {
           serializeNormalWay(); //how?
        } else {
           //custom serialization
        }
    }
}

我曾经尝试过做这样的事情:

serializerProvider.defaultSerializeValue(o, jsonGenerator);

但是这调用MyCustomSerializer的方法,我有永无止境的递归。我怎么能得到适当的序列化对象,我可以用普通bean序列化?

共有1个答案

班安平
2023-03-14

这需要更复杂的设置:您需要让Jackson创建一个序列化程序,然后接管,而不是直接重写要使用的序列化程序。这可以通过注册BeanSerializerModifier(通过模块),方法修改序列化程序(…) 。您将获得将要使用的默认序列化程序,您可以构造自定义序列化程序,并传递该默认序列化程序。

 类似资料:
  • 问题内容: 我想要的是对类的对象有条件地使用默认BeanSerializer: 我试图做这样的事情: 但这调用了MyCustomSerializer的方法,而且我永无止境地递归。如何获得可以用于普通bean序列化的适当的Serializer对象? 问题答案: 这需要更复杂的设置:您需要让Jackson创建一个,然后接管,而不是直接覆盖要使用的序列化器。这可以通过注册(via )方法来完成。将为您提

  • 我有通过WCF(servicecontract接口、dataContracts等)从服务器检索数据应用程序 我有对象: 我将DataRow中字典填充为(列名)-->(列中的值) DataRow中的某些单元格可以为空。字典中具有所有非空值的对象将正确地序列化和反序列化。但如果值为null,则服务只需停止序列化而不会出现任何错误。它并没有停止工作:我的应用程序仍然试图将请求重复到service,而我在

  • 我在Jackson的自定义反序列化程序中有一个问题。我想访问默认序列化程序来填充我要反序列化到的对象。在填充之后,我将执行一些自定义操作,但首先我要使用默认的Jackson行为反序列化对象。 这是我现在有的代码。 我需要的是一种初始化默认反序列化器的方法,这样我就可以在开始我的特殊逻辑之前预填充我的POJO。 当从自定义反序列化程序内调用deserialize时,无论我如何构造序列化程序类,该方法

  • 我想有条件地序列化一个字段。我想出了如何有条件地忽略带有 但我真正想做的是编辑字段。所以如果我有 我明白了 字段2被正确忽略。但我真正想要的是 我还有一个注释, 所以我想做的是把它们结合起来。因此,如果一个字段有特殊的注释,并且我正在使用我的内省器,只有在那时,我才想编辑该字段。否则,该字段应正常序列化。

  • 我有一门课像 我想在我的Web服务中序列化IHideable列表;但是过滤掉任何将隐藏字段设置为true的对象。 基本上给出了一个物体列表,比如 我希望输出为 我尝试了以下实现 但是编写的writeString方法是特定于Address类的。当我在那里使用writeObject时,它抛出stackoverflow异常。我可以使用一些通用writeObject方法来编写实现IHideable()的任

  • 问题内容: 是否可以替换WCF的默认JSON序列化(我目前正在测试行为),并作为MIME类型传递。特别是,我不喜欢默认情况下每个属性都是键/值对,例如: 我仅将服务用于启用JSON的端点(使用jQuery + WCF请求数据)。 问题答案: 您可以使用消息格式化程序来更改用于处理JSON的序列化程序。https://docs.microsoft.com/zh- cn/archive/blogs/c