Десериализовать XML-список элементов строкового элемента каждый

2

Я не могу десериализовать следующий раздел 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
    Как (и где) вы десериализовали XML?
  • 0
    Я добавил раздел «Редактировать» с дополнительной информацией и кодом. Спасибо за вашу помощь!
Теги:
serialization

1 ответ

0
Лучший ответ

При использовании XmlElement для списочных типов элемент контейнера-списка в полученном XML файле теряется. Как у вас есть этот контейнер для ваших fotos -tag, вы должны использовать XmlArrayItem для него:

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

Если вы можете изменить xml, я бы посоветовал использовать согласованный стиль для ваших коллекций, либо используйте контейнер для своего portfolio, либо опустите его для своих fotos.

  • 0
    Спасибо за ваш ответ. Я не уверен, что понимаю, что вы имеете в виду, используя контейнер для «портфолио». Я обновил XML, чтобы вы могли видеть, что внутри одного «основного файла» много «портфелей». В любом случае, ваше решение все еще не работает для меня, я все еще получаю пустой список "фотографий".
  • 0
    @MorgoZ Под контейнером я подразумеваю, что внутри fotos-тега есть еще один вложенный фото-тег, в отличие от портфолио-тега, который не окружен портфелем.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню