Per interesse, ho provato a farlo senza scrivere il mio convertitore. Fondamentalmente mi limito a registrare una versione speciale di CollectionConverter
per un determinato campo in una determinata classe.
Rilevante frammento:
ClassAliasingMapper mapper = new ClassAliasingMapper(xstream.getMapper());
mapper.addClassAlias("tag", String.class);
xstream.registerLocalConverter(
Test.class,
"tags",
new CollectionConverter(mapper)
);
conclamato esempio:
import com.thoughtworks.xstream.*;
import com.thoughtworks.xstream.converters.collections.*;
import com.thoughtworks.xstream.mapper.*;
import java.util.*;
public class Test {
public List<String> tags = new ArrayList<String>();
public List<String> notags = new ArrayList<String>();
public Test(String tag, String tag2) {
tags.add(tag); tags.add(tag2);
notags.add(tag); notags.add(tag2);
}
public static void main(String[] args) {
Test test = new Test("foo", "bar");
XStream xstream = new XStream();
ClassAliasingMapper mapper = new ClassAliasingMapper(xstream.getMapper());
mapper.addClassAlias("tag", String.class);
xstream.registerLocalConverter(
Test.class,
"tags",
new CollectionConverter(mapper)
);
System.out.println(xstream.toXML(test));
}
}
Non testato, ma questo dovrebbe funzionare. No?
xstream.alias("tag", java.lang.String.class);
Questo è esattamente quello che ho fatto circa mezz'ora fa. Ha funzionato a meraviglia. :) –
Potresti per favore approfondire come potrebbe essere la classe Tag? Se continuo a una variabile stringa (diciamo tagValue) in esso, ottengo qualcosa come tagOne tagTwo . Grazie in anticipo. –
Jonna
Come dice Jonna sopra, non penso che questo ti darà l'output che vuoi, a meno che mi manchi qualcosa. L'ho appena provato e ho trovato lo stesso di Jonna. La soluzione qui sotto utilizzando CollectionConverter e ClassAliasingMapper ha fatto ciò che mi serviva solo in 3 righe di codice. – DaveyDaveDave