我在项目中使用simpleframework(http://simple.sourceforge.net/)用于序列化/反序列化需求,但它不像预期的那样工作好吧,至少不是我期望的)在处理空/空字符串值时。simpleframework,将一个空元素反序列化为一个空字符串而不是null
如果我序列化一个空字符串值的对象,它将显示为一个空的XML元素。
所以这
MyObject object = new MyObject();
object.setAttribute(""); // attribute is String
将序列化为
<object>
<attribute></attribute>
</object>
但反序列化空的属性将最终为空值,而不是一个空字符串。
我是不是觉得它应该是一个空字符串,而不是null?我怎样才能让它按我想要的方式工作?
哦,如果我序列化一个空属性的对象,它会最终显示 <object/>
如人们所期望的。
编辑:
添加了一个简单的测试用例我currenty运行
@Test
public void testDeserialization() throws Exception {
StringWriter writer = new StringWriter();
MyDTO dto = new MyDTO();
dto.setAttribute("");
Serializer serializer = new Persister();
serializer.write(dto, writer);
System.out.println(writer.getBuffer().toString());
MyDTO read = serializer.read(MyDTO.class, writer.getBuffer().toString(),true);
assertNotNull(read.getAttribute());
}
@Root
public class MyDTO {
@Element(required = false)
private String attribute;
public String getAttribute() {
return attribute;
}
public void setAttribute(String attribute) {
this.attribute = attribute;
}
}
编辑,固定:
出于某种原因,当一个空字符串传递给它的InputNode值为null 。我通过创建一个自定义的字符串转换器来解决该问题。
new Converter<String>() {
@Override
public String read(InputNode node) throws Exception {
if(node.getValue() == null) {
return "";
}
return node.getValue();
}
@Override
public void write(OutputNode node, String value) throws Exception {
node.setValue(value);
}
});
非常感谢! – Boy 2013-03-23 09:34:40
它就像一个魅力 – 2016-03-31 07:26:44