simpleframework,将空元素反序列化为空字符串而不是null
|
我在项目中使用simpleframework(http://simple.sourceforge.net/)来满足序列化/反序列化的需求,但是在处理空字符串或null字符串时,它无法按预期运行(嗯,至少不是我期望的那样)价值观。
如果我使用空的String值序列化对象,则它将显示为空的xml元素。
所以这
MyObject object = new MyObject();
object.setAttribute(\"\"); // attribute is String
将序列化为
<object>
<attribute></attribute>
</object>
但是反序列化该空属性将最终为null,而不是空String。
我是否完全以为应该是空字符串而不是null呢?在地球上,我如何才能以自己想要的方式工作?
哦,如果我使用null属性序列化对象,它将最终显示
<object/>
正如人们所期望的那样。
编辑:
添加了一个当前正在运行的简单测试用例
@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。我通过为String创建自定义Converter解决了该问题。
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);
}
});
没有找到相关结果
已邀请:
3 个回复
唤副埂侧壬
创建执行从空字符串到空字符串的字符串转换的转换器类
而且不要为持久化器添加ѭ7。
伞腹
臀博