65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 WOX 将 Java 对象序列化为 XML

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (6投票s)

2008年7月26日

GPL3

3分钟阅读

viewsIcon

45315

本文介绍了如何使用 WOX 将 Java 对象序列化为 XML。它的主要特点之一是生成标准的 XML,它是语言无关的。

引言

本文介绍了如何使用 XML 中的 Web 对象 (WOX) 将 Java 对象序列化为 XML。 虽然 WOX 也是 C# 对象的序列化器,但本文仅关注 Java 对象的序列化。 WOX 可在 WOX 序列化器网站上找到。

WOX 的主要特点

下面列出了一些 WOX 的主要特点。

  • 易于使用。Easy 类提供了序列化和反序列化方法。
  • 简单的 XML。生成的 XML 简单,易于理解且与语言无关。
  • 无需修改类。类不需要具有默认构造函数、getter 或 setter。
  • 字段可见性。私有字段与其他字段一样被序列化。 WOX 序列化字段,而不管其可见性如何。
  • Java 和 C# 之间的互操作性。 WOX 可以将 Java 对象序列化为 XML,并将 XML 重构回 C# 对象;反之亦然。
  • 标准的 XML 对象表示。这可能允许在不同的面向对象编程语言中使用 WOX 序列化器。
  • WOX 数据类型。 WOX 映射表指定了原始数据类型如何映射到 WOX 数据类型。
  • 对类更改具有鲁棒性。默认值将用于新添加的字段。
  • 数组。处理原始类型和对象的数组和多维数组。
  • Base-64。为了提高效率,字节数组采用 base-64 编码。
  • 集合类。列表和映射作为 WOX 数据类型提供。(Java 中的 ArrayListHashMap;C# 中的 ArrayListHashtable。)
  • 对象引用。使用 id/idref 处理重复和循环对象引用。
  • 类和类型。这些类的对象通过它们的字符串名称保存。
  • 小巧的体积woxSerializer.jar 文件(仅包含 .class 文件)只有 25K。

使用 WOX

这是 Java 中 WOX 序列化器的快速入门。我们首先创建两个类。然后,我们将创建一些类的对象,这些对象将被序列化为 XML。接下来,我们将看一下 WOX 生成的标准 XML,最后我们将看到 XML 如何返回到 Java 对象。

public class Student {
    private String name;
    private int registrationNumber;
    private Course[] courses;
    //constructors and methods omitted
}

public class Course {
    private int code;
    private String name;
    private int term;
    //constructors and methods omitted
}

请注意,两个类中的字段都是私有的。 WOX 不考虑字段的可见性 - 无论其可见性如何,它们都将被序列化。 Java 中的 WOX 不要求类具有默认构造函数、setter 或 getter。

将 Student 对象序列化为 XML

我们首先创建一个带有一些课程的学生

Course[] courses = { new Course(6756, "XML and Related Technologies", 2),
                     new Course(9865, "Object Oriented Programming", 2),
                     new Course(1134, "E-Commerce Programming", 3) };
Student student = new Student ("Carlos Jaimez", 76453, courses);

我们现在使用 WOX 将学生序列化为 XML。我们需要指定存储 student 对象的文件的名称。

String filename = "student.xml";
Easy.save(student, filename);

Easy 类的 save 方法允许您将对象序列化为 XML 并将其存储到指定的 XML 文件中。

生成的 XML 如下所示

<object type="Student" id="0">
   <field name="name" type="string" value="Carlos Jaimez" />
   <field name="registrationNumber" type="int" value="76453" />
   <field name="courses">
      <object type="array" elementType="Course" length="3" id="1">
         <object type="Course" id="2">
            <field name="code" type="int" value="6756" />
            <field name="name" type="string" value="XML and Related Technologies" />
            <field name="term" type="int" value="2" />
         </object>
         <object type="Course" id="3">
            <field name="code" type="int" value="9865" />
            <field name="name" type="string" value="Object Oriented Programming" />
            <field name="term" type="int" value="2" />
         </object>
         <object type="Course" id="4">
            <field name="code" type="int" value="1134" />
            <field name="name" type="string" value="E-Commerce Programming" />
            <field name="term" type="int" value="3" />
         </object>
      </object>
   </field>
</object>

生成的 XML 是 Student 对象的标准表示形式。每个字段都映射到一个 field 元素,每个对象都映射到一个 object 元素。另请注意,type 属性为您提供了每个字段的 WOX 数据类型。 WOX 生成的 XML 简单,易于理解且与语言无关。

从 XML 反序列化 Student 对象

我们将使用 Easy 类的 load 方法来反序列化 Student 对象。

Student newStudent = (Student)Easy.load(filename);

完成! Student 对象已从 XML 重构到 Java。

摘要

XML 中的 Web 对象是一种以简单而健壮的方式将 Java 对象序列化为 XML 的方法。 WOX 生成的 XML 旨在独立于语言且易于理解。

在本文中,我们介绍了以下内容

  • 解释 WOX 的主要特点。
  • 创建一个要序列化的对象。
  • 通过使用 Easy.save(Object obj, String filename) 方法将对象序列化为 XML。
  • 通过使用 Easy.load(String filename) 方法从 XML 反序列化对象。

此 XML 序列化器的最新版本可以在 WOX 序列化器网站上找到。

历史

  • 1.0 版 - 2008 年 5 月。
© . All rights reserved.