Ошибка при десериализации элемента pubDate канала RSS xml с использованием XmlSerializer
Когда я пытаюсь десериализовать элемент pubDate в формате RSS XML, используя 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>
Что я делаю неправильно? Каково решение этой ошибки?
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
,