0

我创建了一个序列化程序,它扩展了 StdSerializer 以将对象列表转换为 json 中的许多对象。

List<MyParentObject> myList = new LinkedList();    
public class MyParentObject{ private String nameOfObject; }

{
 "_elementNames":['object1','object2'],
 "object1":{...},
 "object2":{...}
}

多亏了我的序列化程序,它才能工作。

public class CustomElementListSerializer extends StdSerializer<List<AbstractElement>> {

    @Override
    public void serialize(List<AbstractElement> elements, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        List<String> eltNames = new LinkedList<>();
        System.err.println( serializerProvider.getActiveView());
        jsonGenerator.writeNull();
        for (AbstractElement element : elements) {
            String nameProperty = Element.getElement().getElementId();
            eltNames.add(nameProperty);
            jsonGenerator.writeFieldName(nameProperty);
            jsonGenerator.writeObject(element);                
        }          
        jsonGenerator.writeFieldName("_elementNames");
        jsonGenerator.writeStartArray();
        for (String eltName : eltNames) {
            jsonGenerator.writeString(eltName);
        }
        jsonGenerator.writeEndArray();        
    }
}

但我不能同时使用@JsonView。Jackson 没有考虑元素内部的注释,并且 serializerProvider.getActiveView()在一次递归调用后丢失了信息。

我怎样才能解决我的问题。也许 StdSerializer 不是好的解决方案。或者我想念如何使用该方法考虑 StdSerializer 中的 JsonView

jsonGenerator.writeObject(element);
4

1 回答 1

0

我找到了解决方案。您必须使用当前 serializerProvider 的配置设置一个新的映射器

ObjectMapper mapper = new ObjectMapper();
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
mapper.setConfig(serializerProvider.getConfig());
jsonGenerator.setCodec(mapper);
于 2018-07-16T14:37:47.910 回答