Подтвердить что ты не робот

Xstream: удаление атрибута класса

Как удалить атрибуты class= "Что-то" в Xstream.

Я использую Xstream с аннотациями

4b9b3361

Ответ 1

Действительно, проблема не так четко сформулирована, как должна. Я предполагаю, что вы используете нестандартную коллекцию или используете поле типа интерфейса, для которого XStream должен хранить фактический класс.

Во втором случае вы можете просто использовать псевдоним:

xstream.alias("field name", Interface.class, ActualClassToUse.class);

Подробнее см. http://markmail.org/message/gds63p3dnhpy3ef2.

Ответ 2

Я прочитал его код и обнаружил, что ваш класс не является mapper.defaultImplementationOf(fieldType), он добавит для вас атрибут класса по умолчанию, если только имя атрибута класса не равно null;

Итак, установите это, чтобы удалить атрибуты class= "Что-то"

 xstream.aliasSystemAttribute(null, "class");

Ответ 3

Используйте что-то подобное, чтобы полностью удалить атрибут класса, а не накладывать его на что-то еще:

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();
}

Ответ 4

Можете ли вы привести пример вывода? Я думаю, что это обычно происходит при использовании Коллекций. Не видя выхода, я думаю, что вам нужно зарегистрировать псевдонимы:

xstream.alias("blog", Blog.class);

Подробнее см. http://x-stream.github.io/alias-tutorial.html для более глубокого охвата. Опять же, вставьте некоторый образец вывода.

Ответ 5

Этот атрибут показан, по крайней мере, когда он не очевиден, какой класс должен использоваться. Примером может служить использование интерфейса. В таких ситуациях вы можете попробовать:

xStream.addDefaultImplementation(YourDefaultImplementation.class, YourInterface.class);

.