Xstream: удаление атрибута класса - PullRequest
12 голосов
/ 05 января 2010

Как удалить атрибуты class = ”Something” в Xstream.

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

Ответы [ 5 ]

19 голосов
/ 24 апреля 2011

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

Итак, установите это, можно удалить атрибуты class = ”Something”

 xstream.aliasSystemAttribute(null, "class");
13 голосов
/ 24 февраля 2010

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

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

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

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

2 голосов
/ 20 апреля 2010

Используйте что-то в этом роде для полного удаления атрибута класса, а не наложения его на что-то другое:

1 голос
/ 06 мая 2015

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

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

.

1 голос
/ 06 января 2010

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

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

См. http://x -stream.github.io / alias-tutorial.html для получения более подробной информации. Снова вставьте образец вывода.

...