java - Jackson 自定义 JsonSerializer - 有条件地调用默认序列化程序

标签 java json serialization jackson fasterxml

我想要的是有条件地为我类的对象使用默认的 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 序列化的适当的 Serializer 对象?

最佳答案

这需要更复杂的设置:不是直接覆盖序列化器来使用,而是需要让 Jackson 创建一个,然后接管。 这可以通过注册 BeanSerializerModifier(通过 Module)方法 modifySerializer(...) 来完成。您将获得要使用的默认序列化器,您可以构建自定义序列化器,并传递该默认序列化器。

关于java - Jackson 自定义 JsonSerializer - 有条件地调用默认序列化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30028407/

相关文章:

json - 在 Scala 中将 JSON 转换为 CSV?

c# - 为什么我们不能在 C# 中使用公共(public)字段进行数据绑定(bind)?

java - Mongo JSON 到 Java POJO 映射

c# - 在 C# 中的二进制反序列化期间更改类型

java - 为什么在 Serializable 类中有 Thread 引用很好,但初始化它会导致 NotSerializableException

java - 使用 webAllowOthers 的 H2 控制台远程访问

java - 不同对象的单例 JFrame

java - 将命令行参数记录到 log4j 中

java - 使用标量乘法乘以 2D 矩阵

javascript - json中的eval数据传入jquery