【XStream】XStream 忽略不重要点元素

翻译 2015年11月20日 15:41:14

        XStream 是一个伟大的库来创建 XML 对象,反之亦然,和我使用它的很多的领域之一是存储配置。一个问题是,XStream 已被忽略字段序列化对象,而不是相反时 — — 例如,如果它发现在您的类中没有相应的属性的标记,它将引发异常。它是不清楚我为什么他们仍然没有任何事情来处理这种情况下,是相当普遍发生。例如,您可能有一个 XML 和只需要一小部分的数据,或者也许你改变你存储配置和删除某些属性的方式。在两种情况下你将不得不映射的整个对象图,即使你不想它。他们常见问题网页国这: 

如果从类中删除字段,反序列化一个老的版本包含的字段将导致引发异常。离开中的地方,但将它声明为瞬态将避免该异常,但 XStream 不会试图反序列化的字段。


我发现这种行为非常奇怪、 令人讨厌,但幸运的是有一种变通方法: XStream 类有一个名为 wrapMapper(MapperWrapper next) 子类可能实施告诉图书馆是否应视为一个给定的类或属性的受保护的方法。在此方法中,您可以添加字段或你不想打扰,并为他们返回 false 的类核查。签出一个工作示例:  
XStream x = new XStream() {
    @Override
    protected MapperWrapper wrapMapper(MapperWrapper next) {
        return new MapperWrapper(next) {
            @Override
            @SuppressWarnings("rawtypes")
            public boolean shouldSerializeMember(Class definedIn, String fieldName) {
                if (fieldName.equals("shouldCopyWithProject")) {
                    return false;
                }
 
                return super.shouldSerializeMember(definedIn, fieldName);
            }
        };
    }
};

在前面的示例中,过一个名为'shouldCopyWithProject'是在我的应用程序的较新版本中删除字段,但这种重构导致崩溃时打开了的文件从旧版本的应用程序,所以我不得不手动处理这种情况。如果 XStream 有一个清洁的解决方案为此,但这是非常不可能发生,这是巨大的。然而,这里所述的方法很有效。
// .....
XStream x = new XStream();
x.omitField(A.class, "shouldCopyWithProject");
// .....

原文地址:点击

举报

相关文章推荐

XStream转换时忽略未知字段

XStream是一个用于将对象序列化为xml以及将xml生成对象的库,通过它可以非常方便的做对象与xml(json等其他格式)之间的转换。但是在使用XStream过程中,会遇到xml元素与对象元素并不...

转换说明符!! hdu 1720 题目很水不重要. 但是c和c++ 按进制输入的不同感觉有点意思

#include #include using namespace std; int main() { int a,b; while(cin>>hex>>a>>b) { cout<<a+b<...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

java WebService接口开发注意点 java 利用Xstream生成和解析xml知识结构

java 利用Xstream生成和解析xml,知识结构:  1.Xstream简介;  使用限制: JDK版本不能 虽然预处理注解是安全的,但自动侦查注解可能发生竞争条件. 特点:  ...

不要被不重要的人和事过多打搅

一只鼬鼠要与一只狮子决战,狮子果断地拒绝了。鼬鼠说:“你害怕了吗?”狮子说:“如果答应你,你就可以得到曾与狮子比武的殊荣;而我呢,以后所有的动物都会耻笑我竟和鼬鼠打架。 不要被不重要的人和事过多打搅...

一个看似不重要的环节——论库存重要性

这两个客户的合作上并不是很困难, 第一点, 他们看重的是我们的库存实力; 第二点, 就是我们的产品是原装进口的高品质; 第三点, 我们是正规渠道来的产品,有总代理证书,有售后保障的。...

深度思维:网络推广的三个不重要

既然来了,绝非偶然!有幸让我们一起换个思维来分析网络推广的三个不重要问题,互联网最大的好处就是信息无处不在,当然还是看自己的领悟和理解,这乍一听三个推广不重要,哪那个重要,乍一听还是有点矛盾。莫急,同...

技术到底重不重要

昨天下午我去参加了 Gulu.com 的产品发表派对,结果被我的好朋友,Gulu 的创办人兼 CEO Jimmy Chen 直接在台上点名,说:有一次 Jamie 跟我说技术一点都不重要,让我好难过。...

差评毁收益?别再说酒店数据分析不重要!

现在的酒店服务性越来越重要,入住者对酒店的服务要求越来越高。深入了解顾客的需求在如今精准营销的时代变得常见又必要。在一项调查中显示,超过半数的人几乎不会预订有差评的酒店。从这个细节可以知道,酒店经营已...

代码质量:结对编程最不重要的理由

很多人在讨论结对编程的时候,通常注重的是结对对代码质量和开发效率产生的效果。这种观点认为:结对的成本是单一开发人员的两倍,但如果他们能在 X%的时间内交付代码,并且bug数量和技术负债更少,分别只有单...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)