我对xstream很新。 我正在研究一个如下所示的模型类:
@XStreamAlias("MyRootClass")
public class MyRootClass {
// A bunch of other classes as child nodes
@XStreamAlias("MyClassList")
private List<MyClass> foo;
}
现在,有没有办法让我在编组时生成以下XML而不修改类?
<MyRootClass>
<!-- a bunch of other class nodes -->
<MyClassList COUNT="3">
<MyClass>MyClass 1</MyClass>
<MyClass>MyClass 2</MyClass>
<MyClass>MyClass 3</MyClass>
</MyClassList>
</MyRootClass>
主要问题是如何将属性“COUNT”正常添加到MyClass列表中。它将始终显示MyClassList中MyClass的数量。
我不允许修改模型类。但是,我可以实现自己的转换器来实现上述目标。
问题是:最好的方法是什么? MyRootClass中有许多其他(复杂)类,并且它们都是别名&amp;注释。那么,从零开始创建一个“元帅”方法可能有点过分了吗?
答案 0 :(得分:0)
welp,我明白了。 不确定这是否是“最佳”方式,但它确实有效。
关键是使用转换器和嵌套转换器。 这就是我最终做的事情:
public class MyRootClassConverter implements Converter {
@Override
public boolean canConvert(Class type) {
return type.equals(MyRootClassConverter.class);
}
@Override
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
MyRootClass rootClass= (MyRootClass) source;
// as necessary
writer.startNode("Other Class1");
writer.setValue("Other Class Value");
writer.endNode();
if (rootClass.getMyClassList() != null || !rootClass.getMyClassList().isEmpty()) {
writer.startNode("MyClassList");
writer.addAttribute("COUNT", String.valueOf(rootClass.getMyClassList().size()));
for (MyClass child : rootClass.getMyClassList()) {
writer.startNode("MyClass");
context.convertAnother(child); // this is where the nesting happens
writer.endNode();
}
writer.endNode();
}
}
}