替代实体 - 使用XStream进行转换

时间:2014-06-16 15:10:10

标签: java serialization xstream

我们正在使用XStream来序列化和反序列化实体。如果实体是持久化的,则它们具有ID,并且对象的序列化形式仅为ID,如下所示:

<Person>4</Person>

“反序列化”只是数据库中的读取操作。

这很好地实现了使用DAO加载实体的SingleValueConverter

public class TestSerializer implements SingleValueConverter {
    public Object fromString(String str) {
        return dao.readById(str);
    }
    public String toString(Object obj) {
        return ((Entity) obj).getId();
    }
}

但在某些情况下,必须序列化的实体不会被持久化。所以他们没有ID,我必须做一个“真正的”序列化。由于XStream知道如何自己序列化许多对象,并且我不关心XML结果的结构,如果我能得到这样的结果就没问题了:

<Person>
  <name>Jon Doe</name>
</Person>

那么在自定义Converter实现中是否可以执行此序列化和反序列化?

2 个答案:

答案 0 :(得分:0)

在转换器中,您可以以任何您喜欢的方式自由转换。因此,基本上您可以在自定义转换器中决定如何(取消)序列化对象。但是,AFAIK无法在单值转换/正常转换之间切换。但是您的示例XML意味着这一点。

如果您只想委托其他转换器(如XStream的ReflectionConverter),则可以使用convertAnother(Object, Converter)方法执行此操作(另请参阅this question/answer)。为此,您必须实现Converter接口而不是SingleValueConverter,才能访问(un-)编组上下文。

这会回答你的问题吗?

HTH,
- 马丁

答案 1 :(得分:0)

Underscore-java可以读写xml文件。我是该项目的维护者。