我创建了一个序列化程序,它扩展了 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);