首先,您的列表注释缺少条目名称:
@ElementList(inline = true, required = false, entry = "object")private List<Object> params;
否则
<string>...</string>,不使用
<object>...</object>。
您可以通过添加
type = String.class到列表的注释中来防止空指针异常。但是,这不能解决主要问题。
通常,空标记/-
null元素不会添加到结果中。
这是一个使用来解决此问题的示例
Converter。
public class SimpleframeworkTest{ // ... @Root(name = "container", strict = false) @Convert(NullawareContainerConverter.class) public static class Container { static final Serializer ser = new Persister(new AnnotationStrategy()); // ... public String toXml() throws Exception { StringWriter sw = new StringWriter(); ser.write(this, sw); return sw.toString(); } public static Container toObject(String xml) throws Exception { return ser.read(Container.class, xml); } // ... } static class NullawareContainerConverter implements Converter<Container> { final Serializer ser = new Persister(); @Override public Container read(InputNode node) throws Exception { final Container c = new Container(); c.id = Integer.valueOf(node.getAttribute("id").getValue()); c.params = new ArrayList<>(); InputNode n; while( ( n = node.getNext("object")) != null ) { c.params.add(n.getValue()); } return c; } @Override public void write(OutputNode node, Container value) throws Exception { ser.write(value.id, node); for( Object obj : value.params ) { if( obj == null ) { obj = ""; // Set a valid value if null } // Possible you have to tweak this by hand ser.write(obj, node); } } }}如评论中所写,您必须做一些进一步的工作。
结果:
testNullsInParams()
<container> <integer>4000</integer> <string>foo</string> <string></string> <string>bar</string></container>
testDeserializeNull()
Container [id=4000, params=[foo, null, bar]]



