我有这样的课程:
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>
有可能吗?我怎么能这样做?
答案 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编写一些动态代码并循环处理所有类。