C#多种类型的XML列表

时间:2016-03-31 18:21:59

标签: c# xml xsd

我从第三方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元素而不是我在这里做的方式?

谢谢,祝你有一个幸福的日子!

1 个答案:

答案 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
    {

    }