xstream压平一个物体

我试图使用转换器/编组来平滑xstream的xml输出而没有运气。 例如,

public class A{ public B b; public int F; public String G; } public class B{ public String C; public String D; public int E; } 

输出为

          

但是我需要

        

这可能吗? 如何摆脱B? (C,D,E是唯一命名的)。 谢谢。 到目前为止我的尝试一直是

 ... public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { B b = (B) value; writer.startNode("C"); writer.setValue(b.getC()); writer.endNode(); writer.startNode("D"); writer.setValue(b.getD()); writer.endNode(); writer.startNode("E"); writer.setValue(b.getE()); writer.endNode(); } 

根据您与XStream的联系程度,您可以使用@XmlPath注释在EclipseLink MOXy中轻松完成此操作:

 public class A{ @XmlPath(".") public B b; public int F; public String G; } public class B{ public String C; public String D; public int E; } 

有关MOXy基于XPath的映射的信息,请参阅:

我找到了一个临时解决方案,虽然它不是最好的。

如果我设置我的canConvert函数来检查周围的对象A而不是B,我可以操纵整个内部对象。

 public boolean canConvert(Class c) { return A.class == c; } 

因为我必须定义所有的A类,所以这是更多的工作(特别是在真正的XML对象中,而不是我的人为例子)。 有没有人知道如何使用内部B类的转换器获得相同的结果?

 public boolean canConvert(Class c) { return B.class == c; }