Как удалить атрибуты class= "Что-то" в Xstream.
Я использую Xstream с аннотациями
Как удалить атрибуты class= "Что-то" в Xstream.
Я использую Xstream с аннотациями
Действительно, проблема не так четко сформулирована, как должна. Я предполагаю, что вы используете нестандартную коллекцию или используете поле типа интерфейса, для которого XStream должен хранить фактический класс.
Во втором случае вы можете просто использовать псевдоним:
xstream.alias("field name", Interface.class, ActualClassToUse.class);
Подробнее см. http://markmail.org/message/gds63p3dnhpy3ef2.
Я прочитал его код и обнаружил, что ваш класс не является mapper.defaultImplementationOf(fieldType)
, он добавит для вас атрибут класса по умолчанию, если только имя атрибута класса не равно null;
Итак, установите это, чтобы удалить атрибуты class= "Что-то"
xstream.aliasSystemAttribute(null, "class");
Используйте что-то подобное, чтобы полностью удалить атрибут класса, а не накладывать его на что-то еще:
private String generateResponse(final XStream xStream)
{
StringWriter writer = new StringWriter();
xStream.marshal(this, new PrettyPrintWriter(writer) {
@Override
public void addAttribute(final String key, final String value)
{
if (!key.equals("class"))
{
super.addAttribute(key, value);
}
}
});
return writer.toString();
}
Можете ли вы привести пример вывода? Я думаю, что это обычно происходит при использовании Коллекций. Не видя выхода, я думаю, что вам нужно зарегистрировать псевдонимы:
xstream.alias("blog", Blog.class);
Подробнее см. http://x-stream.github.io/alias-tutorial.html для более глубокого охвата. Опять же, вставьте некоторый образец вывода.
Этот атрибут показан, по крайней мере, когда он не очевиден, какой класс должен использоваться. Примером может служить использование интерфейса. В таких ситуациях вы можете попробовать:
xStream.addDefaultImplementation(YourDefaultImplementation.class, YourInterface.class);
.