Я обычно проектирую сериализацию в зависимости от содержимого моих «полей». Скажем, что ваши поля имени и значения относительно малы, вы можете сериализовать их как
<list>
<field name="foo" cordX="12324" cordY="1324" value="value of field foo" />
<field name="foo" cordX="12324" cordY="1324" value="value of field foo" />
</list>
Конечно, если значение длинное, вы не хотите сериализовать его как атрибут, а как значение обычного поля, например:
<list>
<field name="foo" cordX="12324" cordY="1324">The long value </field>
<field name="foo" cordX="12324" cordY="1324">Even longer field value...</field>
</list>
Вы можете достичь этого, используя XStream, вот так:
public class Run {
public static void main(String[] args) {
XStream xs = new XStream(new DomDriver());
xs.processAnnotations(new Class[] { Field.class, Container.class });
Container c = new Container();
c.addField("boo", 1,2, "desc");
c.addField("boo", 1,2, "desc");
String serialized = xs.toXML(c);
System.out.println(serialized);
// deserialize
Container newContainer = (Container) xs.fromXML(serialized);
if (newContainer.fields.size() != 2) {
System.out.println("Not deserialized as expected...");
}
// if you don't want "container"
xs.alias("mylist", List.class);
System.out.println(xs.toXML(c.fields));
}
}
где вы определяете свой Контейнер и Поле следующим образом:
@XStreamAlias("mylistofitems")
public class Container {
public List<Field> fields;
public void addField(String name, int x, int y, String desc) {
if (fields == null) fields = new ArrayList<Field>();
fields.add(new Field(name, x,y, desc));
}
}
@XStreamAlias("field")
public class Field {
public Field() {}
public Field(String name, int x, int y, String desc) {
this.name = name;
cordX = x;
cordY = y;
value = desc;
}
@XStreamAsAttribute
private String name;
@XStreamAsAttribute
private int cordX;
@XStreamAsAttribute
private int cordY;
@XStreamAsAttribute
private String value;
}
Программа выдаст такой вывод:
<mylistofitems>
<fields>
<field name="boo" cordX="1" cordY="2" value="desc"/>
<field name="boo" cordX="1" cordY="2" value="desc"/>
</fields>
</mylistofitems>
<mylist>
<field name="boo" cordX="1" cordY="2" value="desc"/>
<field name="boo" cordX="1" cordY="2" value="desc"/>
</mylist>
Надеюсь, это поможет.