我目前正在使用简单的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”?我对如何删除此属性感到困惑。
答案 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")