使用简单的xml不需要的类属性

时间:2014-05-10 21:44:43

标签: java xml

我目前正在使用简单的XML库,而教程没有ElementLists的可运行示例。 http://simple.sourceforge.net/home.php

我有一个示例类:

@Root
public class Example {

@ElementList
private List<String> text;

@Attribute
private int index;

public Example() {
   super();
}  

public Example(List<String> text, int index) {
   this.text = text;
   this.index = index;
}

public List<String> getMessage() {
  return text;
}

public int getId() {
  return index;
}
}

一个简单的运行类:

public class M {

public static void main(String[] args) throws Exception {
    Serializer serializer = new Persister();
    List<String> l = new LinkedList<String>();

    l.add("f");
    l.add("f");

    Example example = new Example(l, 123);
    File result = new File("example.xml");

    serializer.write(example, result);
}

}

我生成的XML是:

<example index="123">
<text class="java.util.LinkedList">
  <string>f</string>
  <string>f</string>
</text>
</example>

为什么我得到class =“java.util.LinkedList”?我对如何删除此属性感到困惑。

2 个答案:

答案 0 :(得分:1)

您可以使用VisitorStrategy拦截对象的序列化。

Strategy strategy = new VisitorStrategy(new Visitor() {

    @Override
    public void write(Type type, NodeMap<OutputNode> node) throws Exception {
        if ("text".equals(node.getName())){
            node.remove("class");
        }
    }
    ...
});

答案 1 :(得分:0)

我正在研究相同的问题,并且有一种避免使用'class'属性的方法。

而不是像这样使用@ElementList:

@ElementList(name="Files", entry="File")

您可以将@Path注释与@ElementList一起使用,如下所示:

@Path(value="Files")
@ElementList(inline=true, entry="File")