java - XStream 或简单

标签 java xml jaxb xstream pojo

我需要决定使用哪一个。我的情况很简单。我需要将一个简单的 POJO/Bean 转换为 XML,然后再转换回来。没什么特别的。

我正在寻找的一件事是它也应该包括父属性。最好是它可以在父类(super class)型上工作,它可以只是一个标记接口(interface)。

如果有人能比较这两者的优缺点,哪个缺少哪个。我知道 XStream也支持 JSON,这是一个加号。但是Simple如果我们把 JSON 放在一边,看起来更简单。 Simple 在发展和社区方面的 future 是什么?我相信 XStream 非常流行,甚至“XStream”这个词也在 SO 上引起了很多讨论。

谢谢。

最佳答案

仅通过阅读文档(我面临着与您相同的问题,但还没有尝试过任何一种方法;对此持保留态度):

XSTREAM

  1. Google 非常非常容易。关于它的示例、论坛帖子和博客帖子很容易找到。
  2. 开箱即用。 (当然,可能需要更多调整,但它会立即给您一些东西。)
  3. 将变量转换为属性需要创建一个单独的转换器类,并使用 XStream 进行注册。 (对于简单的值并不难,但需要一些额外的工作。)
  4. 根本不处理版本控制,除非您添加 XMT(另一个库);如果您的类生成的 XML 发生变化,它根本不会反序列化。 (添加 XMT 后,您可以随心所欲地更改类,并让 XStream 很好地处理它,只要您创建越来越多的增量版本控制函数即可。)
  5. 所有调整都需要您编写代码,要么实现您自己的(反)序列化函数,要么调用 XStream 函数来改变所使用的(反)序列化技术。
  6. 简单的语法说明:您需要将反序列化器的输出转换为您的类。

简单

  1. 主页是唯一可靠的信息来源;它列出了大约六篇外部文章,并且有一个邮件列表,但您无法在狂野的 Internet 上找到它。
  2. 需要在代码运行前对其进行注释。
  3. 使用属性而不是每个属性的 XML 节点来制作更紧凑的 XML 文件很容易。
  4. 每当类正确但版本不同时,通过不严格解析来处理版本控制。 (即,如果你添加了两个字段并从上一个版本中删除了一个,它会忽略删除的字段并且不会抛出异常,但不会设置添加的字段。)像 XStream 一样,它似乎没有一种将数据从一个版本迁移到下一个版本的方法,但与 XStream 不同的是,没有外部库可以介入和处理它。据推测,处理这个问题的方法是使用一些外部函数(也许是你类(class)中的“版本”变量?),所以你这样做

    Stuff myRestoredStuff = serializer.read(Stuff.class, file); myRestoredStuff.sanityCheck();

  5. 常用的(反)序列化调整是通过添加/编辑注释进行的,但如果您需要做一些笨拙的事情,也支持编写您自己的(反)序列化函数来覆盖标准方法。

  6. 简单的语法说明:您需要将恢复对象的类传递给反序列化器(但不需要转换结果)。

关于java - XStream 或简单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1558087/

相关文章:

java - Docx4j 加载 docx 时出现 NullPointerException

xml - 将 Magento 前端选项卡修改为自定义 View : For bundled products

java - Jackson XmlMapper 在将 XML 写入文件时强制使用小写标记名称

ruby - 获取没有文本节点的元素的子元素

java - JAXB MOXy 将多个对象迭代映射到单个 XML

java - JAXB 不会对错误的日期时间值抛出错误

java - 如何在发送请求时强制 JAXB 写入 xsi :type of a javax. jws.WebParam(CXF 实现)

java - Solr new HttpSolrClient.Builder( str ) 导致 java.lang.NoClassDefFoundError : org/apache/http/impl/client/SystemDefaultHttpClient

java - Web应用程序中序列化的目的

java - NaN 的总和 : How is the underlying bit pattern calculated?