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

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

text 

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

谢谢!

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

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

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

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

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

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

这在JAXB中要容易得多

 @XmlRootElement public class Node { @XmlAttribute String att; @XmlValue String value; } 

另一种方式:

  @XStreamAlias("My") private static class My { private String field; } XStream xStream = new XStream(); xStream.autodetectAnnotations(true); xStream.useAttributeFor(My.class, "field");