2010-01-04 125 views
2

如何让Xstream仅序列化明确注释的字段并忽略剩余的字段?Xstream:隐式忽略所有字段

我想序列化一个hibernate持久对象和所有代理相关的字段被序列化,我不想在我的xml中。
例如

<createdBy class="com..domain.Users " reference="../../values/createdBy"/> 

是不是我想在我的XML。

编辑:我不认为我明确提出这个问题。一个类可以从基类中继承,在基类上我无法控制基类的属性(如hibernate的情况)。

public class A { 
    private String ShouldNotBeSerialized; 
} 

public class B extends A { 
    @XStreamAlias("1") 
    private String ThisShouldbeSerialized; 
} 

在当我序列B类此情况下,基类领域ShouldNotBeSerialized也将获得序列化。这不是我想要的。在大多数情况下,我不会对A类

控制。因此我想默认是忽略各个领域和序列化,我明确指定注释仅领域。我想避免GaryF正在做什么,我需要明确指定我需要省略的字段。

+0

你有没有做到这一点?如果是的话,你可以请你发表答案。我遇到同样的问题 – 2010-02-06 12:07:25

回答

3

您可以使用@XstreamOmitField批注omit fields。直接从本手册:

@XStreamAlias("message") 
class RendezvousMessage { 

    @XStreamOmitField 
    private int messageType; 

    @XStreamImplicit(itemFieldName="part") 
    private List<String> content; 

    @XStreamConverter(SingleValueCalendarConverter.class) 
    private Calendar created = new GregorianCalendar(); 

    public RendezvousMessage(int messageType, String... content) { 
     this.messageType = messageType; 
     this.content = Arrays.asList(content); 
    } 
} 
+0

如果您使用注释,请不要忘记在您的XStream实例上调用autodetectAnnotations(true)。 – Sly 2011-08-03 16:24:57

+0

我不认为这回答了OP的问题。他希望“隐式”省略,而不必明确注释每个领域。看到我的答案下面的另一个选项。 – 2013-08-03 20:08:08

1

我想唯一的直接的方式就是潜入写MapperWrapper并排除你有没有注释的所有字段。听起来像是XStream的功能请求。

2

目前已经为XStream的人一票:

再次,这是由设计。 XStream是一个序列化工具,而不是数据绑定工具 。它将Java对象序列化为XML并返回。它 将写入任何东西到XML中,这是重新创建一个相等的对象图所必需的。生成的XML可以通过配置 进行一些调整,但这已经是一个附加组件。 喜欢做的事可以通过实现一个自定义映射器来完成,但这是用户列表的 问题,无法在此处理。

http://jira.codehaus.org/browse/XSTR-569

2

我可以不采取信用为这个答案,只是分享我所发现的。你可以重写XStream类的wrapMapper方法来实现你所需要的。

此链接详细解释:http://pvoss.wordpress.com/2009/01/08/xstream/

这里,如果你不想让你的解释需要的代码:

您可能需要您实现此代码之前完成所有的测试因为默认的XStream对象抛出的异常对于查找拼写错误很有用。