simpleframework, десериализация пустого элемента в пустую строку вместо null

Я использую simpleframework (http://simple.sourceforge.net/) в проекте для моих потребностей в сериализации / десериализации, но это не работает так, как ожидалось (ну, по крайней мере, не так, как я ожидаю) при работе с пустыми / нулевыми значениями String.

Если сериализовать объект с пустым значением String, он будет отображаться как пустой xml-элемент.

Итак, этот
Объект MyObject = новый Объект MyObject();
object.setAttribute(""); Атрибут String

будет сериализоваться как


Но десериализация этого пустого атрибута вместо пустого String будет равно null.

Неужели я совершенно сумасшедший, думая, что это должна быть пустая строка, а не null? И как я могу заставить его работать так, как я этого не хочу?

Да, и если я сериализую объект с атрибутом null, он в конечном итоге будет показывать как и следовало ожидать.

Edit:

Добавлен простой тестовый случай, который я текущий использую

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

Edit, fixed:

По какой-то причине значение InputNode равно null при переходе к нему пустой строки. Я решил проблему, создав пользовательский конвертер для 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);
    }

});
7
задан quietmint 1 November 2012 в 23:00
поделиться