广告子类型的XStream集合

时间:2014-03-26 08:29:44

标签: java xml xstream

我有这样的课程:

class A{
//pojo
}
class B extends {
// pojo
}
class C{
@XStreamImplicit( itemFieldName="A")
private ArrayList<A> aList = null;
}

C类的字段aList包含一个A.class对象类型和一种B.class类型。

我可以将类序列化和反序列化为此xml:

<c>
 <aList>
  <a/>
  <a/>
 </aList>
</c> 

但我希望xml文件看起来像这样:

<c>
 <aList>
  <a/>
  <b/>
 </aList>
</c> 

有可能吗?我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

这对我有用:

@XStreamAlias("a")
public class A {

}

@XStreamAlias("b")
public class B extends A {

}

@XStreamAlias("c")
public class C {
    private ArrayList<A> aList = null;

    public C() {
        aList = new ArrayList<A>();
        aList.add(new A());
        aList.add(new B());
        aList.add(new A());
    }

    public static void main(String[] args) {
        C c = new C();

        XStream x = new XStream();
        x.processAnnotations(A.class);
        x.processAnnotations(B.class);
        x.processAnnotations(C.class);

        System.out.println(x.toXML(c));
    }

}

并生产:

<c>
  <aList>
    <a/>
    <b/>
    <a/>
  </aList>
</c>

如果您不想为每个可能的类调用processAnnotations,您可以使用反射API编写一些动态代码并循环处理所有类。