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>