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);
    }

});
    
已邀请:
回答完整性 使用convert注释对元素进行注释,并将其提供给转换器类作为参数
@Convert(SimpleXMLStringConverter.class)
创建执行从空字符串到空字符串的字符串转换的转换器类
public class SimpleXMLStringConverter implements Converter<String> {


    @Override
    public String read(InputNode node) throws Exception {
        String value = node.getValue();
        if(value == null) {
            value = \"\";
        }
        return value;
    } 

    @Override
    public void write(OutputNode node, String value) throws Exception {
        node.setValue(value);
    }

}
而且不要为持久化器添加ѭ7。     
使用属性注释。它具有一个名为empty的属性,用于提供默认值。 请参阅简单框架Javadocs。     
我是否完全以为应该是空字符串而不是null呢? 据我所知...通常,这表明在序列化过程中存在一些问题,应该返回对象以及所有具有序列化设置值的非临时实例变量。 顺便说一句,您没有发布所有代码,也有可能序列化开始的顺序意味着它跳过了String数据,这有时可能是个问题。     

要回复问题请先登录注册