Xstream: removing class attribute

*爱你&永不变心* 提交于 2019-12-21 03:53:13

问题


How do I remove the class=”Something ” attributes in Xstream .

I use Xstream with annotations


回答1:


Indeed the problem is not as clearly phrased as it should. My guess is that you are using a non-standard collection or using a field of an interface type for which XStream needs to store the actual class.

In the second case you can just use alias:

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

See http://markmail.org/message/gds63p3dnhpy3ef2 for more details.




回答2:


I read its code and found if your class is not mapper.defaultImplementationOf(fieldType) , it will add the default class attribute for you, unless the class attribute name is null;

So, set this can remove the class=”Something ” attributes

 xstream.aliasSystemAttribute(null, "class");



回答3:


Use something of this sort to remove the class attribute completely rather than aliasing it with something else:

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:


This attribute is shown, at least, when it's not obvious which class shall be used. Usage of interface is an example. In situations like that You can try:

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

.




回答5:


Can you give some example output? I think this usually happens when using Collections. Without seeing the output, my best guess is that you need to register aliases:

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

See http://x-stream.github.io/alias-tutorial.html for more in-depth coverage. Again, paste in some sample output.



来源:https://stackoverflow.com/questions/2008043/xstream-removing-class-attribute

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!