我需要决定使用哪一个。我的情况非常简单。我需要将一个简单的POJO / Bean转换为XML,然后再转换回来。没什么特别的。
我正在寻找的一件事是它应该包括父属性。如果它可以在超类型上工作,那将是最佳选择,超级类型可以只是一个标记界面。
如果有人可以将这两者与缺点和专业人士进行比较,那么哪一个缺少哪一个。我知道XStream也支持JSON,这是一个加号。但如果我们将JSON放在一边,Simple看起来就更简单了。在开发和社区方面,Simple的未来是什么?我相信XStream非常受欢迎,即使是“XStream”这个词,在SO上打了很多线程。
感谢。
答案 0 :(得分:11)
只是阅读文档(我正面临着同样的问题,但是还没有尝试过任何一种方式;带上一点点盐):
<强> XSTREAM 强>
<强> SIMPLE 强>
只要类正确,解析时就处理版本控制,但版本不同。 (即,如果您添加了两个字段并从上一个版本中删除了一个字段,它将忽略已删除的字段而不会抛出异常,但不会设置添加的字段。)与XStream一样,它似乎没有将数据从一个版本迁移到另一个版本的方法,但与XStream不同,没有外部库可以介入并处理它。据推测,处理这种情况的方法是使用一些外部函数(也许是你班级中的“版本”变量?),所以你做了
填充myRestoredStuff = serializer.read(Stuff.class,file); myRestoredStuff.sanityCheck();
通常使用(de)序列化调整是通过添加/编辑注释来完成的,但如果您需要做一些粗略的事情,则支持编写自己的(de)序列化函数来覆盖标准方法。
答案 1 :(得分:8)
为什么不使用JAXB?
有用的资源:
答案 2 :(得分:7)
我建议您查看Simple
答案 3 :(得分:2)
答案 4 :(得分:1)
到目前为止,我从未使用过Simple框架。
根据我对Xstream的经验。它在XML上运行良好。但是,对于JSON,当我尝试序列化包含Hashtable列表的bean时,结果并不像预期的那样精确。
答案 5 :(得分:1)
Simple和Jaxb的一个“简单”(双关语)缺点是它们需要在将对象序列化为XML之前对其进行注释。当您很快想要使用未注释的对象序列化其他人的代码时会发生什么?如果你能看到有一天发生的事情,那么XStream更适合。 (有时它真的只是归结为这样的简单要求来推动你的决定。)
答案 6 :(得分:0)
在阅读stackoverflow时快速查看简单;作为Paul Marshalls有用帖子的修正案,我想我会提到Simple似乎支持通过注释进行版本控制 -
http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#version
答案 7 :(得分:0)
Simple比XStream慢(在序列化对象中为xml)
http://pronicles.blogspot.com/2011/03/xstream-vs-simple.html
答案 8 :(得分:0)
我想在此分享一下。 要让XStream忽略丢失的字段(删除属性时):
XStream xstream = new XStream() {
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new MapperWrapper(next) {
@Override
public boolean shouldSerializeMember(Class definedIn,
String fieldName) {
if (definedIn == Object.class) {
return false;
}
return super.shouldSerializeMember(definedIn, fieldName);
}
};
}
};
这也可以扩展到处理版本和属性重命名。
感谢Peter Voss:https://pvoss.wordpress.com/2009/01/08/xstream