simpleframework,将一个空元素反序列化为一个空字符串而不是null

问题描述 投票:7回答:3

为了满足序列化/反序列化的需要,我在项目中使用了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/)来满足我的序列化/反序列化需求,但是在处理空/时,它无法按预期方式工作(嗯,至少不是我期望的那样)。 ..

java serialization deserialization simple-framework
3个回答
10
投票

完整性要求


1
投票

使用属性注释。它具有一个名为empty的属性,用于提供默认值。


-1
投票

我完全认为这应该是空字符串而不是null吗?

© www.soinside.com 2019 - 2024. All rights reserved.