作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有这些类(class):
@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
都会被填充。在第一个 XML 中有一个 DogConfig
实例,在第二个 XML 中有一个 CatConfig
实例。
这是否可以通过添加一些注释来实现?
最佳答案
看来 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 链接中,示例使用抽象类,而不是接口(interface)。
编辑:
正如 Blaise Doughan 在其评论中所说,@XmlElementRef
更适合此目的。代码已相应更新。
关于java - XStream 序列化和反序列化中的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11484532/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!