XML反序列化返回空数组

时间:2012-11-13 15:43:57

标签: c# xml xml-serialization

另一个XML反序列化问题。

我已经检查了其他几个线程并尝试了大部分解决方案,但无济于事。 我收到的XML不能被修改(或至少不容易),这是:

<?xml version=\"1.0\" encoding=\"UTF-8\"?> 
<ActueleVertrekTijden>
    <VertrekkendeTrein>
        <RitNummer>37047</RitNummer>
        <VertrekTijd>2012-11-13T15:40:00+0100</VertrekTijd>
        <EindBestemming>Sneek</EindBestemming>
        <TreinSoort>Stoptrein</TreinSoort>
        <Vervoerder>Arriva</Vervoerder>
        <VertrekSpoor wijziging=\"false\">3</VertrekSpoor>
    </VertrekkendeTrein>
    <VertrekkendeTrein>
        <RitNummer>10558</RitNummer>
        <VertrekTijd>2012-11-13T15:46:00+0100</VertrekTijd>
        <EindBestemming>Rotterdam Centraal</EindBestemming>
        <TreinSoort>Intercity</TreinSoort>
        <RouteTekst>Heerenveen, Steenwijk, Utrecht C</RouteTekst>
        <Vervoerder>NS</Vervoerder>
        <VertrekSpoor wijziging=\"false\">4</VertrekSpoor>
    </VertrekkendeTrein>
    <VertrekkendeTrein>
        <RitNummer>37349</RitNummer>
        <VertrekTijd>2012-11-13T15:59:00+0100</VertrekTijd>
        <EindBestemming>Groningen</EindBestemming>
        <TreinSoort>Sneltrein</TreinSoort>
        <RouteTekst>Buitenpost</RouteTekst>
        <Vervoerder>Arriva</Vervoerder>
        <VertrekSpoor wijziging=\"false\">5b</VertrekSpoor>
    </VertrekkendeTrein>
</ActueleVertrekTijden>

还有更多元素(总是最少10个)

现在这些是我反序列化的类:

[Serializable, XmlRoot(ElementName="ActueleVertrekTijden", DataType="VertrekkendeTrein", IsNullable=false)]
public class ActueleVertrekTijden
{
    [XmlArray("ActueleVertrekTijden")]
    public VertrekkendeTrein[] VertrekLijst { get; set; }
}

[Serializable]
public class VertrekkendeTrein
{
    [XmlElement("RitNummer")]
    public string RitNummer { get; set; }
    [XmlElement("VertrekTijd")]
    public string VertrekTijd { get; set; }
    [XmlElement("EindBestemming")]
    public string EindBestemming { get; set; }
    [XmlElement("Vervoerder")]
    public string Vervoerder { get; set; }
    [XmlElement("VertrekSpoor")]
    public string VertrekSpoor { get; set; }
}

我暂时省略了其他人。我添加的XmlRoot部分因为我得到了“xmlsn =” - 错误。所以必须设置XmlRoot。

现在反序列化器:

        public ActueleVertrekTijden Deserialize<ActueleVertrekTijden>(string s)
    {
        var ser = new XmlSerializer(typeof(ActueleVertrekTijden));
        ActueleVertrekTijden list = (ActueleVertrekTijden)ser.Deserialize(new StringReader(s));

        return list;
    }

它返回一个ActueleVertrekTijden类,但VertrekLijst数组保持为空

1 个答案:

答案 0 :(得分:2)

您需要省略包装器命名空间,因为您的数组元素直接出现在容器ActueleVertrekTijden类的下方,而没有任何集合wrapper元素。即改变

 [XmlArray("ActueleVertrekTijden")]
 public VertrekkendeTrein[] VertrekLijst { get; set; }

 [XmlElement("VertrekkendeTrein")]
 public VertrekkendeTrein[] VertrekLijst { get; set; }

参考here