我无法使用 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; }
}
最佳答案
当对列表类型使用 XmlElement
时,生成的 xml 中的容器列表元素将丢失。由于您确实为您的fotos
标签设置了容器,因此您应该为它使用XmlArrayItem
:
public class Portfolio
{
[XmlArray("fotos")]
[XmlArrayItem("foto")]
public List<Foto> Fotos { get; set; }
}
如果您可以更改 xml,但我建议为您的收藏使用一致的样式,也可以为您的 portfolio
使用容器,或者为您的 fotos
省略它>.
关于c# - 反序列化每个字符串元素的 XML 元素列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54861965/