Xstream:删除类属性

发布于 2024-08-16 20:56:23 字数 78 浏览 5 评论 0原文

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

我使用带注释的 Xstream

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

I use Xstream with annotations

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

娇柔作态 2024-08-23 20:56:23

我读了它的代码,发现如果你的类不是 mapper.defaultImplementationOf(fieldType) ,它会为你添加默认的类属性,除非类属性名称为 null;

所以,设置这个可以删除 class=”Something ” 属性

 xstream.aliasSystemAttribute(null, "class");

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");
叶落知秋 2024-08-23 20:56:23

事实上,这个问题的表述并不像应有的那么清晰。我的猜测是您正在使用非标准集合或使用 XStream 需要存储实际类的接口类型的字段。

在第二种情况下,您可以只使用别名:

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

请参阅 http://markmail.org/message/gds63p3dnhpy3ef2 了解更多详细信息。

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.

饭团 2024-08-23 20:56:23

使用这种类型的东西可以完全删除类属性,而不是用其他东西给它起别名:

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();
}

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();
}
薄暮涼年 2024-08-23 20:56:23

至少,当不明显应使用哪个类时,会显示此属性。接口的使用是一个例子。
在这种情况下,您可以尝试:

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

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

.

靖瑶 2024-08-23 20:56:23

你能给出一些示例输出吗?我认为这通常发生在使用集合时。在没有看到输出的情况下,我最好的猜测是您需要注册别名:

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

请参阅 http:// /x-stream.github.io/alias-tutorial.html 了解更深入的内容。再次粘贴一些示例输出。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文