java – XStream序列化和反序列化中的多态性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – XStream序列化和反序列化中的多态性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1283字,纯文字阅读大概需要2分钟。
内容图文
![java – XStream序列化和反序列化中的多态性](/upload/InfoBanner/zyjiaocheng/721/7e344c0b985f4bd7811b5e89f704269e.jpg)
我有这些课程:
@XStreamAlias("person")
public class PersonConfig {
private AnimalConfig animalConfig;
}
public interface AnimalConfig {}
@XStreamAlias("dog");
public class DogConfig extend AnimalConfig {}
@XStreamAlias("cat");
public class CatConfig extend AnimalConfig {}
我希望能够使用上面的类反序列化这个xml:
<person>
<dog/>
<person>
除了反序列化这个xml,使用相同的类:
<person>
<cat/>
<person>
因此,在这两种情况下,PersonConfig的字段animalConfig都已填充.在带有DogConfig实例的第一个XML和带有CatConfig实例的第二个XML中.
这是否可以通过添加一些注释来使其工作?
解决方法:
似乎XStream不允许你轻松地做到这一点.
您的问题类似于this one,要求使用XStream管理类似xsd:choice的内容.
如果您不一定需要使用XStream,JAXB将允许您轻松地执行此操作:
@XmlRootElement(name="person")
public class PersonConfig {
private AnimalConfig animalConfig;
@XmlElementRefs({
@XmlElementRef(name="cat", type=CatConfig.class),
@XmlElementRef(name="dog", type=DogConfig.class)
})
public AnimalConfig getAnimalConfig() {
return animalConfig;
}
public void setAnimalConfig(AnimalConfig animalConfig) {
this.animalConfig = animalConfig;
}
}
经过一些研究,如果您选择使用XmlAdapter,则可以避免列出您的属性的所有可用类.
在Blaise Doughan链接中,该示例使用抽象类,而不是接口.
编辑:
正如Blaise Doughan在评论中所说,@ XMLElementRef更适合这个目的.代码已相应更新.
内容总结
以上是互联网集市为您收集整理的java – XStream序列化和反序列化中的多态性全部内容,希望文章能够帮你解决java – XStream序列化和反序列化中的多态性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。