每个字符串元素的元素的XML列表反序列化

时间:2019-02-25 08:13:36

标签: c# xml serialization

我无法使用C#反序列化以下XML片段

<mainfile>
    <portfolio>
        <fotos>
            <foto> <!CDATA[https://whatever.com/fotos/E/400/photo.JPG]]>
            </foto>
        </fotos>
    </portfolio>
    <portfolio>
        <fotos>
            <foto> <!CDATA[https://whatever.com/fotos/E/400/photo1.JPG]]>
            </foto>
        </fotos>
    </portfolio>
</mainfile>

我认为应该很简单,但是反序列化时总是返回一个空列表。这是代码:

[XmlRoot("mainfile")]
public class MainFile
{
    public MainFile()
    {
        porftolios= new List<Portfolio>();
    }

    [XmlElement("portfolio")]
    public List<Portfolio> Portfolios{ get; set; }
}

public class Portfolio
{
    ....
    [XmlElement("fotos")]
    public List<Foto> Fotos { get; set; }
}

public class Foto
{
    [XmlText]
    public string data{ get; set; }
}

谢谢。

编辑。 从HimBromBeere的解决方案中,我采用了以下代码,并获得了成功的结果:

public class Portfolio
{
    ....
    [XmlArray("fotos")]
    [XmlArrayItem("foto")]
    public List<Foto> Fotos { get; set; }
}

public class Foto
{
    [XmlText]
    public string data{ get; set; }
}

1 个答案:

答案 0 :(得分:0)

XmlElement用于列表类型时,结果xml中的container-list-element丢失。 这样做时,您的fotos标签具有该容器,因此应使用XmlArrayItem

public class Portfolio
{
    [XmlArray("fotos")]
    [XmlArrayItem("foto")]
    public List<Foto> Fotos { get; set; }
}

但是,如果您可以更改xml,我建议对您的集合使用一致的样式,也可以为portfolio使用容器,或者为fotos省略容器。