我们正在使用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实现中是否可以执行此序列化和反序列化?
答案 0 :(得分:0)
在转换器中,您可以以任何您喜欢的方式自由转换。因此,基本上您可以在自定义转换器中决定如何(取消)序列化对象。但是,AFAIK无法在单值转换/正常转换之间切换。但是您的示例XML意味着这一点。
如果您只想委托其他转换器(如XStream的ReflectionConverter
),则可以使用convertAnother(Object, Converter)
方法执行此操作(另请参阅this question/answer)。为此,您必须实现Converter
接口而不是SingleValueConverter
,才能访问(un-)编组上下文。
这会回答你的问题吗?
HTH,
- 马丁
答案 1 :(得分:0)
Underscore-java可以读写xml文件。我是该项目的维护者。