【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的简单使用参考 http://x-stream.github.io/tutorial.html xstream官方教程 http://www.cnblogs.com/LiZ...

XStream转换时忽略未知字段

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

xStream 排除属性

原文地址: http://jlins.iteye.com/blog/1175134 1.使用@XStreamOmitField 对不生成xml的字段加注释 2.用法: 3.@XStrea...

JVM常量池及字符串==比较分析

Java常量池技术java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实...
  • jdsjlzx
  • jdsjlzx
  • 2017年03月02日 16:51
  • 942

Gradle 1.12用户指南翻译——第四十五章. 应用程序插件

Gradle 应用程序插件扩展了语言插件的一些常见应用程序相关的任务。它允许为 jvm 运行和捆绑应用程序。 45.1. 用法 要使用这个应用程序插件,请在构建脚本中包含以下语句: 示例 45.1...

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

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

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

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

Postman_Chrome_安装不重要详解

  • 2017年11月12日 20:52
  • 54.33MB
  • 下载

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

既然来了,绝非偶然!有幸让我们一起换个思维来分析网络推广的三个不重要问题,互联网最大的好处就是信息无处不在,当然还是看自己的领悟和理解,这乍一听三个推广不重要,哪那个重要,乍一听还是有点矛盾。莫急,同...
  • sz3seo
  • sz3seo
  • 2016年05月26日 16:26
  • 155
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【XStream】XStream 忽略不重要点元素
举报原因:
原因补充:

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