为了满足序列化/反序列化的需要,我在项目中使用了simpleframework(http://simple.sourceforge.net/),但是在处理空/空字符串值时,它不能按预期的方式工作(嗯,至少不是我期望的那样。)>
如果我序列化具有空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
值为空。我通过为String
创建自定义转换器解决了该问题。
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);
}
});
我在项目中使用simpleframework(http://simple.sourceforge.net/)来满足我的序列化/反序列化需求,但是在处理空/时,它无法按预期方式工作(嗯,至少不是我期望的那样)。 ..
完整性要求
使用属性注释。它具有一个名为empty的属性,用于提供默认值。
我完全认为这应该是空字符串而不是null吗?