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

sub*_*ubb 18 java xml xstream

我想使用XStream将对象序列化为此表单的XML.

<node att="value">text</node>
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

man*_*rid 17

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

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

对于att属性,XStream Annotations Tutorial也说了:

请注意,不需要XStreamAsAttribute注释.转换器隐含地假定它.

  • 我认为这应该是答案 (3认同)

Kir*_*iru 7

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

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());     
    }
}
Run Code Online (Sandbox Code Playgroud)

在使用XStream时,注册转换器

final XStream stream = new XStream(new DomDriver());
stream.registerConverter(new FieldDtoConvertor());
Run Code Online (Sandbox Code Playgroud)