我从第三方Web服务中提取一些非常复杂的数据。 XSD工具不能处理特定模式,因此我尝试手动构建所有数据对象。
public class TrainConnection implements Connection {
double distance;
private Map<String, Connection> connectionMap;
public static TrainConnection newConnection = new TrainConnection();
@Override
public double getDistance() {
return distance;
}
@Override
public Station getStationA() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Station getStationB() {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Station getOtherStation(Station station) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
}
基本上,Collection中的每个项目都可以是Activity或Container,但不能同时是两者。
我试图在C#中使用XmlSerializer来序列化/反序列化Xml,我有一个支持Serializer的对象库,目前看起来像这样:
<Children>
<Activity></Activity>
<Activity></Activity>
<Container></Container>
<Activity></Activity>
<Container></Container>
...
</Children>
ChildrenItem是我尝试用XML编写xsd:choice。
不幸的是,当我从WebService DeSerialize XML时,跳过了Children集合。
1)如何修复对象以便正确处理XML? 2)有没有更好的方法来处理xsd:choice元素而不是我在这里做的方式?
谢谢,祝你有一个幸福的日子!
答案 0 :(得分:1)
这就是你真正需要的。不要使用数组因为它会创建一个额外的标签,这在你的情况下是行不通的。 XmlElement将使用数组或列表。
[XmlRoot("Children")]
public class Children
{
[XmlElement("Activity")]
List<Activity> activity { get; set; }
[XmlElement("Container")]
List<Container> container { get; set; }
}
[XmlRoot("Activity")]
public class Activity
{
}
[XmlRoot("Container")]
public class Container
{
}