2.9 使用反射序列化

接下来,测试一下 serializeObject 方法的功能。

使用两个测试类如下所示,其中 Zoo 类中可以添加 Animal

public class Zoo {
    private String city;
    private String name;

    Animal[] list;
  int count;

    public Zoo(String city, String name) {
        this.city = city;
        this.name = name;
        list = new Animal[10];
    }

    public void add(Animal animal) {
        list[count++] = animal;
    }
}

public class Animal {
    private String name;
    private String gender;
    private String classification;
    private int weight;

    public Animal(String name, String gender, String classification, int weight) {
        super();
        this.name = name;
        this.gender = gender;
        this.classification = classification;
        this.weight = weight;
    }
}

测试代码如下:

@Test
public void serializeObjectTest() {
  Animal panda1 = new Animal("Tian tian", "male", "lai kan da xiong mao", 271);
  Animal panda2 = new Animal("Mei hua", "female", "lai kan da xiong mao", 221);
  Zoo zoo = new Zoo("National Zoo", "Beijing");
  zoo.add(panda1);
  zoo.add(panda2);

  XMLOutputter out = new XMLOutputter(Format.getPrettyFormat());
  Document doc;
  try {
    doc = Serializer.serializeObject(zoo);
    out.output(doc, System.out);
  } catch (IllegalArgumentException | IllegalAccessException | IOException e) {
    e.printStackTrace();
  }
}

输出结果如下:

<?xml version="1.0" encoding="UTF-8"?>
<serialized>
  <object class="com.satansk.learning.reflection.Zoo" id="0">
    <field name="city" declaringClass="com.satansk.learning.reflection.Zoo">
      <reference>1</reference>
    </field>
    <field name="name" declaringClass="com.satansk.learning.reflection.Zoo">
      <reference>3</reference>
    </field>
    <field name="list" declaringClass="com.satansk.learning.reflection.Zoo">
      <reference>5</reference>
    </field>
    <field name="count" declaringClass="com.satansk.learning.reflection.Zoo">
      <value>2</value>
    </field>
  </object>
  <object class="java.lang.String" id="1">
    <field name="value" declaringClass="java.lang.String">
      <reference>2</reference>
    </field>
    <field name="hash" declaringClass="java.lang.String">
      <value>0</value>
    </field>
  </object>
  <object class="[C" id="2" length="12">
    <value>N</value>
    <value>a</value>
    <value>t</value>
    <value>i</value>
    <value>o</value>
    <value>n</value>
    <value>a</value>
    <value>l</value>
    <value />
    <value>Z</value>
    <value>o</value>
    <value>o</value>
  </object>
  <object class="java.lang.String" id="3">
    <field name="value" declaringClass="java.lang.String">
      <reference>4</reference>
    </field>
    <field name="hash" declaringClass="java.lang.String">
      <value>0</value>
    </field>
  </object>
  <object class="[C" id="4" length="7">
    <value>B</value>
    <value>e</value>
    <value>i</value>
    <value>j</value>
    <value>i</value>
    <value>n</value>
    <value>g</value>
  </object>
  <object class="[Lcom.satansk.learning.reflection.Animal;" id="5" length="10">
    <reference>6</reference>
    <reference>13</reference>
    <null />
    <null />
    <null />
    <null />
    <null />
    <null />
    <null />
    <null />
  </object>
  <object class="com.satansk.learning.reflection.Animal" id="6">
    <field name="name" declaringClass="com.satansk.learning.reflection.Animal">
      <reference>7</reference>
    </field>
    <field name="gender" declaringClass="com.satansk.learning.reflection.Animal">
      <reference>9</reference>
    </field>
    <field name="classification" declaringClass="com.satansk.learning.reflection.Animal">
      <reference>11</reference>
    </field>
    <field name="weight" declaringClass="com.satansk.learning.reflection.Animal">
      <value>271</value>
    </field>
  </object>
  <object class="java.lang.String" id="7">
    <field name="value" declaringClass="java.lang.String">
      <reference>8</reference>
    </field>
    <field name="hash" declaringClass="java.lang.String">
      <value>0</value>
    </field>
  </object>
  <object class="[C" id="8" length="9">
    <value>T</value>
    <value>i</value>
    <value>a</value>
    <value>n</value>
    <value />
    <value>t</value>
    <value>i</value>
    <value>a</value>
    <value>n</value>
  </object>
  <object class="java.lang.String" id="9">
    <field name="value" declaringClass="java.lang.String">
      <reference>10</reference>
    </field>
    <field name="hash" declaringClass="java.lang.String">
      <value>0</value>
    </field>
  </object>
  <object class="[C" id="10" length="4">
    <value>m</value>
    <value>a</value>
    <value>l</value>
    <value>e</value>
  </object>
  <object class="java.lang.String" id="11">
    <field name="value" declaringClass="java.lang.String">
      <reference>12</reference>
    </field>
    <field name="hash" declaringClass="java.lang.String">
      <value>0</value>
    </field>
  </object>
  <object class="[C" id="12" length="20">
    <value>l</value>
    <value>a</value>
    <value>i</value>
    <value />
    <value>k</value>
    <value>a</value>
    <value>n</value>
    <value />
    <value>d</value>
    <value>a</value>
    <value />
    <value>x</value>
    <value>i</value>
    <value>o</value>
    <value>n</value>
    <value>g</value>
    <value />
    <value>m</value>
    <value>a</value>
    <value>o</value>
  </object>
  <object class="com.satansk.learning.reflection.Animal" id="13">
    <field name="name" declaringClass="com.satansk.learning.reflection.Animal">
      <reference>14</reference>
    </field>
    <field name="gender" declaringClass="com.satansk.learning.reflection.Animal">
      <reference>16</reference>
    </field>
    <field name="classification" declaringClass="com.satansk.learning.reflection.Animal">
      <reference>11</reference>
    </field>
    <field name="weight" declaringClass="com.satansk.learning.reflection.Animal">
      <value>221</value>
    </field>
  </object>
  <object class="java.lang.String" id="14">
    <field name="value" declaringClass="java.lang.String">
      <reference>15</reference>
    </field>
    <field name="hash" declaringClass="java.lang.String">
      <value>0</value>
    </field>
  </object>
  <object class="[C" id="15" length="7">
    <value>M</value>
    <value>e</value>
    <value>i</value>
    <value />
    <value>h</value>
    <value>u</value>
    <value>a</value>
  </object>
  <object class="java.lang.String" id="16">
    <field name="value" declaringClass="java.lang.String">
      <reference>17</reference>
    </field>
    <field name="hash" declaringClass="java.lang.String">
      <value>0</value>
    </field>
  </object>
  <object class="[C" id="17" length="6">
    <value>f</value>
    <value>e</value>
    <value>m</value>
    <value>a</value>
    <value>l</value>
    <value>e</value>
  </object>
</serialized>

results matching ""

    No results matching ""