java - Java 中对象 XML 序列化的最佳方法

标签 java xml serialization

我正在编写服务来在我们的应用程序中实现审核,其中用户可以在任何修改之前和之后查看特定实体的状态,并且还应该能够将其回滚。我们决定将 XML 序列化对象存储在数据库中的 XML_TYPE 列中。

我是序列化新手,我不知道如何实现相同的效果,需要对要序列化的对象进行任何更改,或者我们是否需要任何映射 XML。有人可以推荐一些好的库吗,我知道市场上有很多可用的库,例如 JAXB、JIBX、JABX、XStream 等。哪个好以及如何使用它。

非常感谢任何帮助。

问候, 拉维。

最佳答案

当然,对于实体来说最好的是拥有 POJO(普通旧 Java 对象)。没有奇怪的属性、引用或方法。它简化了序列化,并使模型对象与框架和奇怪的层(如持久性、UI、远程访问等)保持中立。

XStream:简单

我建议使用 XStream 库进行序列化。它试图成为将对象序列化和反序列化为 XML 的最简单方法。

你应该这样思考序列化:

  • 指出该对象是什么类
  • 尝试序列化每个属性

所以,这是序列化中要解决的两个问题。 XStream 允许您创建序列化程序(XStream 类),(可选)指示每个类使用什么标记名称,并且(可选)指示属性的别名。

所以如果你有类似的东西:

package pack;

Person
+ mom: Person
+ dad: Person

它将在没有配置的情况下写入:

<pack.Person>
  <mom>
    <pack.Person>
    ...
    </pack.Person>
  </mom>
  <dad>
    <pack.Person>
    ...
    </pack.Person>
  </dad>
</pack.Person>

但是如果你告诉它映射 package.Person 到它将会使用该标签。你可以告诉它把属性“mom”写成“mother”等等。

XStream xs = new XStream();
xs.alias("person", Person.class);
xs.aliasAttribute(Person.class, "mom", "mother");

引用文献

XStream 还可以让您指出您想要的引用类型:

  • 无引用:序列化对象 每次它在对象中找到它时 树
  • 绝对引用:第二次 找到一个对象,它保存一个 使用绝对路径引用 第一个实例 (/人/人[4]/老师)
  • 相对引用:相同,但是 使用来自 this 的相对引用 点(../../人[4]/老师)

关于java - Java 中对象 XML 序列化的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1973829/

相关文章:

java - 序列化期间的竞争条件

java - 使用 SuperCSV 清理单元格值

c# - “元素”是无效的 XmlNodeType

python - 解析时转义错误的 XML

c# - 如何在 C# 中按以...开头的属性选择节点

c# - JsonConvert DeserializeObject 区分大小写

c++ - boost::text_oarchive 对象的序列化堆栈损坏

java - 当弱引用对象作为key放入HashMap时会发生什么?

java - 如何在javaFX中实现多imageView选择按住控制按钮

java - 从 YAML 属性文件实例化 POJO (LocalDateTime)(Java 和 Spring Boot)