我无法使用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; }
}
答案 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
省略容器。