如何删除Xstream中的 class =“Something”属性。
我使用带有注释的Xstream
答案 0 :(得分:18)
我读了它的代码,发现如果你的类不是mapper.defaultImplementationOf(fieldType)
,它会为你添加默认的class属性,除非class属性名是null;
所以,设置它可以删除class =“Something”属性
xstream.aliasSystemAttribute(null, "class");
答案 1 :(得分:13)
事实上,这个问题并没有像应该的那样明确。我的猜测是你使用非标准集合或使用XStream需要存储实际类的接口类型的字段。
在第二种情况下,您可以使用别名:
xstream.alias("field name", Interface.class, ActualClassToUse.class);
有关详细信息,请参阅http://markmail.org/message/gds63p3dnhpy3ef2。
答案 2 :(得分:2)
使用此类内容完全删除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();
}
答案 3 :(得分:1)
你能给出一些例子输出吗?我认为这通常在使用Collections时发生。没有看到输出,我最好的猜测是你需要注册别名:
xstream.alias("blog", Blog.class);
有关更深入的报道,请参阅http://x-stream.github.io/alias-tutorial.html。再次,粘贴一些样本输出。
答案 4 :(得分:1)
至少,当不明显使用哪个类时,会显示此属性。接口的用法就是一个例子。 在这样的情况下你可以尝试:
xStream.addDefaultImplementation(YourDefaultImplementation.class, YourInterface.class);