代码之家  ›  专栏  ›  技术社区  ›  tosovvoj

类型ad子类型的XStream集合

  •  0
  • tosovvoj  · 技术社区  · 10 年前

    我有这样的课:

    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 回复  |  直到 10 年前
        1
  •  1
  •   bary    10 年前

    这对我有用:

    @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编写一些动态代码,并在循环中处理所有类。