<PlayListSettings>
<PlayList>
<id>PlayList1</Name>
<File class="string">/mnt/sdcard/Video1</File>
</PlayList>
</PlayListSettings>
这是我的序列化 xml,其中 File 是字符串数组列表。我可以使用 xstream.aliasSystemAttribute(null, "class"); 删除 class="string";
and the output is
<PlayListSettings>
<PlayList>
<id>PlayList1</Name>
<File>/mnt/sdcard/Video1</File>
</PlayList>
</PlayListSettings>
如何使用 XStream 反序列化?
最佳答案
您可以使用@XStreamImplicit
注释。这是一个完整的工作示例:
@XStreamAlias("PlayList")
public final class PlayList {
@XStreamImplicit(itemFieldName = "File")
private final List<String> files = new ArrayList<>();
public void addFile(final String file) {
checkFile(file);
files.add(file);
}
public void removeFile(final String file) {
checkFile(file);
files.remove(file);
}
public List<String> getFiles() {
return Collections.unmodifiableList(files);
}
private void checkFile(final String file) {
if (file == null) {
throw new NullPointerException();
} else if (file.isEmpty()) {
throw new IllegalArgumentException("is empty");
}
}
public static void main(String[] args) {
final PlayList playList = new PlayList();
playList.addFile("Foo");
playList.addFile("Bar");
// Serialize
final XStream xstream = new XStream();
xstream.autodetectAnnotations(true);
final String xml = xstream.toXML(playList);
System.out.println(xml);
// Deserialize
final PlayList playList2 = (PlayList) xstream.fromXML(xml);
for (final String file : playList.getFiles()) {
System.out.println(file);
}
}
}
输出如下:
<PlayList>
<File>Foo</File>
<File>Bar</File>
</PlayList>
关于java - 如何使用XStream反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23244383/