2015-12-15 2 views
0

У меня есть следующий код, и я не могу десериализовать фид RSS ATOM для класса. Узел «команда» не может быть прочитан, а остальные свойства, похоже, не заполняются. Когда я комментирую узел «team».Чтение ReadElementExtensions из RSS ATOM

Это мой код:

URL-адрес на RSS фид: http://www.volleybal.nl/application/handlers/export.php?format=rss&type=poule&standen=D3K&iRegionId=7000

public static SyndicationFeed GetFeed(string feedUrl) 
    { 
     Uri serviceUri = new Uri(feedUrl); 
     WebClient downloader = new WebClient(); 

     Stream responseStream = downloader.OpenRead(serviceUri); 

     XmlReader responseReader = XmlReader.Create(responseStream); 
     SyndicationFeed syndicationFeed = SyndicationFeed.Load(responseReader); 
     return syndicationFeed; 
    } 

System.Collections.ObjectModel.Collection<Stand> oo = programFeed.ElementExtensions.ReadElementExtensions<Stand>("ranking", "http://www.nevobo.nl/competitie/"); 

[Serializable] 
[XmlSerializerFormat] 
[DataContract(Name = "stand", Namespace = "http://www.nevobo.nl/competitie/")] 
[XmlRoot(ElementName = "stand", Namespace = "http://www.nevobo.nl/competitie/")] 
public class Stand 
{ 
    public Stand() 
    { 
    } 

    [DataMember(Name = "nummer")] 
    [XmlElement("nummer")] 
    public string Nummer { get; set; } 

    [DataMember(Name = "team")] 
    [XmlElement("team")] 
    public Team Team { get; set; } 

    [DataMember(Name = "wedstrijden")] 
    [XmlElement("wedstrijden")] 
    public string Wedstrijden { get; set; } 

    [DataMember(Name = "punten")] 
    [XmlElement("punten")] 
    public string Punten { get; set; } 

    [DataMember(Name = "setsvoor")] 
    [XmlElement("setsvoor")] 
    public string Setsvoor { get; set; } 

    [DataMember(Name = "setstegen")] 
    [XmlElement("setstegen")] 
    public string Setstegen { get; set; } 

    [DataMember(Name = "puntenvoor")] 
    [XmlElement("puntenvoor")] 
    public string Puntenvoor { get; set; } 

    [DataMember(Name = "puntentegen")] 
    [XmlElement("puntentegen")] 
    public string Puntentegen { get; set; } 
} 

[Serializable] 
//[XmlSerializerFormat] 
//[DataContract(Name = "team")] 
[DataContract(Name = "team", Namespace = "http://www.nevobo.nl/competitie/")] 
//[XmlRoot(ElementName = "team", Namespace = "http://www.nevobo.nl/competitie/")] 
//[System.Xml.Serialization.XmlType(AnonymousType = true)] 
public class Team 
{ 
    public Team() 
    { 
    } 

    [DataMember(Name = "id")] 
    [XmlAttribute(AttributeName ="id")] 
    public string Id { get; set; } 

    [DataMember] 
    [XmlText] 
    public string Text { get; set; } 
} 

ответ

0

Я имел аналогичные проблемы с использованием метода ReadElementExtension и с чтением пользовательских атрибутов. Я решил это, используя XElement в качестве возвращаемого типа.

Вот как я справилась с ней (с помощью C# 6.0 конструкции):

private XElement ReadElement(SyndicationFeed feed, string extspace, string extname) 
{ 
    var elements = feed.ElementExtensions.ReadElementExtensions<XElement>(extname, extspace); 
    return elements.FirstOrDefault(); 
} 

private XAttribute ReadAttribute(string extspace, string extname, string attname) 
{ 
    var element = ReadElement(extspace, extname); 
    var attribute = element?.Attribute(attname); 
    return attribute; 
} 

Вот некоторые примеры кода для вызова этих методов, при условии, что «канал» является экземпляр SyndicationFeed объекта. Эти прочитанные пользовательские элементы и атрибуты для подкастов ITunes:

private const string ITUNES = "http://www.itunes.com/dtds/podcast-1.0.dtd"; 
... 
string explicitValue = ReadElement(ITUNES, "explicit")?.Value; 
string imageUrl = ReadAttribute(ITUNES, "image", "href")?.Value; 
Смежные вопросы