Xstream:删除class属性

时间:2010-01-05 17:59:33

标签: java attributes annotations xstream

如何删除Xstream中的 class =“Something”属性。

我使用带有注释的Xstream

5 个答案:

答案 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);