Jackson 使用不同的自定义序列化器序列化字段
Jackson serialize field with different custom serializers
是否可以为特定字段编写 n 个自定义序列化程序,然后有时使用序列化程序 A 而另一次使用序列化程序 B?我以前写过自定义序列化器,但我是通过注释使用它们的,这在这种情况下是不可能的。我真的很想避免像视图这样的东西,因为那时我必须为每个序列化程序实现编写一个 getter。
这是我的:
@JsonSerialize(using = MongoIdSerializer.class)
String id;
这就是我想要的:
@JsonSerialize(using = <SerializerDeclaredByPropertyFile>)
String id;
您可以编写在 属性 上使用的自定义序列化程序。
@JsonSerialize(using = DelegatingSerializer.class)
String id;
实现应该是这样的:
public class DelegatingSerializer extends JsonSerializer<String>{
public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
JsonSerializer<String> serializer = getSerializer();
serializer.serialize(value, jgen, provider);
}
private JsonSerializer<String> getSerializer() {
...
return someSerializerInstance;
}
}
在 getSerializer
方法中,您将 return 一个正确序列化程序的实例。
是否可以为特定字段编写 n 个自定义序列化程序,然后有时使用序列化程序 A 而另一次使用序列化程序 B?我以前写过自定义序列化器,但我是通过注释使用它们的,这在这种情况下是不可能的。我真的很想避免像视图这样的东西,因为那时我必须为每个序列化程序实现编写一个 getter。
这是我的:
@JsonSerialize(using = MongoIdSerializer.class)
String id;
这就是我想要的:
@JsonSerialize(using = <SerializerDeclaredByPropertyFile>)
String id;
您可以编写在 属性 上使用的自定义序列化程序。
@JsonSerialize(using = DelegatingSerializer.class)
String id;
实现应该是这样的:
public class DelegatingSerializer extends JsonSerializer<String>{
public void serialize(String value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
JsonSerializer<String> serializer = getSerializer();
serializer.serialize(value, jgen, provider);
}
private JsonSerializer<String> getSerializer() {
...
return someSerializerInstance;
}
}
在 getSerializer
方法中,您将 return 一个正确序列化程序的实例。