我想使用XStream将对象序列化为此表单的XML。
<node att="value">text</node>
节点( text )的值是序列化对象上的字段,以及 att 属性。如果没有为这个对象编写转换器,这可能吗?
谢谢!
答案 0 :(得分:17)
您可以使用预定义的转换器。
@XStreamAlias("node")
@XStreamConverter(value=ToAttributedValueConverter.class, strings={"text"})
class Node {
private String att;
private String text;
}
XStream Annotations Tutorial也说 att 属性:
请注意,不需要XStreamAsAttribute注释。该 转换器隐含地假定它。
答案 1 :(得分: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());
}
}
使用XStream时,注册转换器
final XStream stream = new XStream(new DomDriver());
stream.registerConverter(new FieldDtoConvertor());
答案 2 :(得分:0)
这在JAXB中更容易
@XmlRootElement
public class Node {
@XmlAttribute
String att;
@XmlValue
String value;
}
答案 3 :(得分:0)
另一种方法:
@XStreamAlias("My")
private static class My {
private String field;
}
XStream xStream = new XStream();
xStream.autodetectAnnotations(true);
xStream.useAttributeFor(My.class, "field");