问题
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