XStream :具有属性和文本节点的节点?

2022-09-02 21:16:50

我想使用XStream将对象序列化为这种形式的XML。

<node att="value">text</node>

节点(文本)的值是序列化对象上的字段,以及 att 属性。如果不为此对象编写转换器,这是否可能?

谢谢!


答案 1

您可以使用预定义的转换器。

@XStreamAlias("node")
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"text"})
class Node {
  private String att;
  private String text;
}   

XStream Annotations Tutorial 还说,对于 att 属性:

请注意,不需要 XStreamAs 属性注释。转换器隐式假定它。


答案 2

编写转换器,它应该类似于代码片段

class FieldDtoConvertor implements Converter {
    @SuppressWarnings("unchecked")
    public boolean canConvert(final Class clazz) {
        return clazz.equals(FieldDto.class);
    }

    public void marshal(final Object value,
            final HierarchicalStreamWriter writer,
            final MarshallingContext context) {
        final FieldDto fieldDto = (FieldDto) value;
        writer.addAttribute(fieldDto.getAttributeName(), fieldDto.getAttributeValue());     
    }
}

在使用XStream时,注册转换器

final XStream stream = new XStream(new DomDriver());
stream.registerConverter(new FieldDtoConvertor());

推荐