У меня есть следующая проблема, и я понятия не имею, как это решить.как игнорировать имя поля в то время как маршаллинг/unmarshalling объект java
У меня есть список различных типов точек, основанных на общем интерфейсе. Я использую Java XStream для сортировки и развязывания этих классов.
public static void main(String[] args) {
List<IPoint> listOfPoint = new ArrayList<IPoint>();
listOfPoint.add(new PointTypeA(0.1));
listOfPoint.add(new PointTypeB(0.2));
listOfPoint.add(new PointTypeA(0.3));
PointSet ps = new PointSet(1, listOfPoint);
XStream xstream = new XStream(new StaxDriver());
xstream.processAnnotations(PointTypeA.class);
xstream.processAnnotations(PointTypeB.class);
xstream.processAnnotations(PointSet.class);
String xml = xstream.toXML(ps);
System.out.println(xml);
}
Когда я печатаю свои объекты в формате XML, я получаю следующий результат:
<set id="1">
<typeA>
<xCoordinate>0.1</xCoordinate>
</typeA>
<typeB>
<xCoordinate>0.2</xCoordinate>
</typeB>
<typeA>
<xCoordinate>0.3</xCoordinate>
</typeA>
</set>
Но вместо результата выше, я хочу иметь следующий вывод:
<set id="1">
<typeA>0.1</typeA>
<typeB>0.2</typeB>
<typeA>0.3</typeA>
</set>
Я хочу не иметь тегов, как <xCoordinate>
, но я хочу, чтобы их значение хранилось в теге classname. Я не хочу игнорировать значение поля xCoordinate, но я хочу иметь «встроенное значение». Можно ли это сделать? Я пробовал конвертеры без успеха, и я понятия не имею, как это решить.
Мои классы:
public interface IPoint {
int getSomeInformation();
}
@XStreamAlias("set")
public class PointSet {
@XStreamAsAttribute
private int id;
@XStreamImplicit
private List<IPoint> points;
public PointSet(int id, List<IPoint> points) {
super();
this.id = id;
this.points = points;
}
}
@XStreamAlias("typeA")
public class PointTypeA implements IPoint {
private double xCoordinate;
public PointTypeA(double d) {
super();
this.xCoordinate = d;
}
}
@XStreamAlias("typeB")
public class PointTypeB implements IPoint {
private double xCoordinate;
public PointTypeB(double d) {
super();
this.xCoordinate = d;
}
}
Пожалуйста, помогите мне, если вы можете. Спасибо.
Я не знаю, как работает XStream, но обычно на Java вы используете ключевое слово «переходный», чтобы указать, что переменная не должна автоматически сохраняться/извлекаться. Не смешивайте его с «изменчивым» btw, который указывает, что переменная должна быть прочитана и записана в терминах кеширования. – JayC667