Десериализовать XML-список элементов строкового элемента каждый - PullRequest
0 голосов
/ 25 февраля 2019

Я не могу десериализовать следующий раздел XML с помощью C #

<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 голосов
/ 25 февраля 2019

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...