Jackson如何在自定义Serializer/Deserializer中检索父bean

ago*_*st_ 5 java serialization json jackson

在自定义序列化器/反序列化器中,有没有办法检索字段的父bean?

例如 :

public class Foo {
@JsonSerialize(using = MyCustomSerializer.class)
public Bar bar;

}


public class Bar {

}


public class MyCustomSerializer extends JsonSerializer<Bar> {

    @Override
    public void serialize(Bar value, JsonGenerator jgen, SerializerProvider serializers) throws IOException, JsonProcessingException {
        // get Foo ??
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,我想在我的序列化器中获取Foo而不在Bar中有引用.

Sta*_*Man 8

如果您使用的是Jackson 2.5,则可以通过访问父对象JsonGenerator.getCurrentValue().或者,进一步向上层次结构,去经由getOutputContext()(其具有getParent()getCurrentValue()方法).这也适用JsonParser于自定义反序列化器.


pgk*_*ley 5

对于反序列化,您无权访问该JsonGenerator对象。以下为我工作:

JsonStreamContext parsingContext = jsonParser.getParsingContext();
JsonStreamContext parent = parsingContext.getParent();
Object currentValue = parent.getCurrentValue();
Run Code Online (Sandbox Code Playgroud)