Вы можете достичь своей цели, используя пользовательский класс .
Здесь вас немного угадывает, так как вы не указали код для AttributeValues
и AttributeValue
класс. Я буду использовать следующие классы:
AttributeValues
класс:
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import java.util.ArrayList;
import java.util.List;
@XStreamAlias("AttributeValues")
public class AttributeValues
{
@XStreamImplicit(itemFieldName="AttributeValue")
public List<AttributeValue> Values;
public AttributeValues()
{
Values = new ArrayList<AttributeValue>();
}
public void add(String id, String lg, String value)
{
AttributeValue item = new AttributeValue();
item.attributeId = id;
item.languageId = lg;
item.value = value;
Values.add(item);
}
}
AttributeValue
класс:
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
public class AttributeValue
{
@XStreamAsAttribute
public String attributeId;
@XStreamAsAttribute
public String languageId;
public String value;
}
А вот AttributeValueConverter
класс:
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
public class AttributeValueConverter implements Converter
{
public boolean canConvert(Class clazz) {
return AttributeValue.class == clazz;
}
public void marshal(Object object, HierarchicalStreamWriter hsw, MarshallingContext mc) {
AttributeValue av = (AttributeValue) object;
hsw.addAttribute("attributeId", av.attributeId);
hsw.addAttribute("languageId", av.languageId);
hsw.setValue(av.value);
}
public Object unmarshal(HierarchicalStreamReader hsr, UnmarshallingContext uc) {
AttributeValue av = new AttributeValue();
av.attributeId = hsr.getAttribute("attributeId");
av.languageId = hsr.getAttribute("languageId");
if (av.languageId == null) av.languageId = "";
av.value = hsr.getValue();
return av;
}
}
Сериализация:
AttributeValues obj = new AttributeValues();
obj.add("id01", "en", "20");
XStream xstream = new XStream();
xstream.autodetectAnnotations(true);
xstream.registerConverter(new AttributeValueConverter());
String s = xstream.toXML(obj);
Unserialization:
XStream xstream = new XStream();
xstream.autodetectAnnotations(true);
xstream.registerConverter(new AttributeValueConverter());
AttributeValues newobj = (AttributeValues)xstream.fromXML(s);
Хорошо, тот работал для меня. –