gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:33 28 4
gpt4 key购买 nike

我在一个项目中使用 simpleframework ( http://simple.sourceforge.net/ ) 来满足我的序列化/反序列化需求,但在处理空/空字符串值时它没有按预期工作(好吧,至少不是我期望的那样)。

如果我用空字符串值序列化一个对象,它将显示为一个空的 xml 元素。

所以这样:

MyObject object = new MyObject();  
object.setAttribute(""); // attribute is String

将序列化为:

<object>  
<attribute></attribute>
</object>

但是反序列化该空属性将最终为 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 创建自定义转换器解决了这个问题。 .

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

}

并且不要将 new AnnotationStrategy() 添加到您的 persister。

关于java - simpleframework,将空元素反序列化为空字符串而不是 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5648607/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com