Ошибка при десериализации элемента pubDate XML-канала RSS с использованием XmlSerializer.

Когда я пытаюсь десериализовать элемент pubDate XML-файла RSS с помощью XmlSerializer, я получаю эту ошибку:

Произошло необработанное исключение типа «System.InvalidOperationException» в System.Xml.dll.

Это класс, который я использую при десериализации:

    public class RssItem
{
    [XmlElement("title")]
    public string Title { get; set; }

    [XmlElement("description")]
    public string Description { get; set; }

    [XmlElement("pubDate")]
    public DateTime Date { get; set; }

    [XmlElement("link")]
    public string Link { get; set; }
}

а элемент pubDate имеет следующий формат:

<pubDate>Sat, 29 Mar 2014 19:27:18 EDT</pubDate>  

Что я делаю неправильно? Каково решение этой ошибки?


person burhan    schedule 29.03.2014    source источник


Ответы (1)


Кажется, у вас возникли проблемы с форматом даты и времени, возможно, вы можете исправить это с помощью атрибутов DataType и DisplayFormat, но вместо этого я бы использовал LINQ to XML:

var rssItems = XDocument.Load("path or URL")
                .Descendants("item")
                .Select(x => new RssItem
                {
                    Title = (string) x.Element("title"),
                    Description = (string) x.Element("description"),
                    Date = DateTime.ParseExact(string.Join(" ",x.Element("pubDate").Value.Split().Take(5)), "ddd, dd MMM yyyy HH:mm:ss", CultureInfo.InvariantCulture),
                    Link = (string) x.Element("link")
                }).ToList();

Я проделал некоторые манипуляции с вашей строкой Date, потому что не смог правильно разобрать ее на своем компьютере. Может быть, вы можете добавить конец формата спецификатора K и попробовать разобрать его напрямую с помощью CultureInfo.CurrentCulture, без использования Split и Take.

person Selman Genç    schedule 29.03.2014