xstream压平一个物体

时间:2010-07-09 22:27:48

标签: java xml xml-serialization 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;
}

输出为

<A>
  <B>
     <C></C>
     <D></D>
     <E></E>
  </B>
  <F></F>
  <G></G>
</A>

但我需要

<A>
  <C></C>
  <D></D>
  <E></E>
  <F></F>
  <G></G>
</A>
这可能吗?如何摆脱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();
}

2 个答案:

答案 0 :(得分:0)

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

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

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

由于我必须定义所有类A,因此这需要做更多的工作(尤其是在真正的XML对象中,而不是我设计的示例)。 有没有人知道如何使用内部B类的转换器获得相同的结果?

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

答案 1 :(得分:0)

根据您与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的映射的信息,请参阅: