2014-04-04 54 views
3

我試圖將下列xml反序列化爲一個對象。 Xml有多個名稱空間。 我試圖將Xml反序列化爲一個對象。 對象(數據)具有對LastChannel對象的引用。 但是,當我問data.channel應該給我的LastChannel,我得到一個空指針。具有多個名稱空間的XML反序列化

XML:

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
     xmlns="http://purl.org/rss/1.0/" 
     xmlns:dc="http://purl.org/dc/elements/1.1/" 
     xmlns:mp="http://www.tagesschau.de/rss/1.0/modules/metaplus/" 
     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 
     xmlns:content="http://purl.org/rss/1.0/modules/content/"> 

<channel> 
<title>title</title> 
<description>Default description</description> 
<dc:date>2013-04-15 13:27:06</dc:date> 
<sy:updateBase>2013-04-15 13:27:06</sy:updateBase> 
<sy:updatePeriod>hourly</sy:updatePeriod> 
<sy:updateFrequency>12</sy:updateFrequency> 
</channel> 
</rdf:RDF> 

的對象是這樣的:

[XmlRoot("RDF", Namespace = "http://www.w3.org/1999/02/22-rdf-syntax-ns#")] 
public class LastRss 
{ 
    [XmlElement("channel")] 
    public LastChannel channel { get; set; } 
} 

public class LastChannel 
{ 
    [XmlElement("title")] 
    public string title { get; set; } 
    [XmlElement("description")] 
    public string description { get; set; } 
    [XmlElement("date", Namespace = "http://purl.org/dc/elements/1.1/")] 
    public DateTime date { get; set; } 
    [XmlElement("updateBase", Namespace = "http://purl.org/rss/1.0/modules/syndication/")] 
    public DateTime updateBase { get; set; } 
    [XmlElement("updatePeriod", Namespace = "http://purl.org/rss/1.0/modules/syndication/")] 
    public string updatePeriod { get; set; } 
    [XmlElement("updateFrequency", Namespace = "http://purl.org/rss/1.0/modules/syndication/")] 
    public int updateFrequency { get; set; } 
} 

有人認爲爲什麼data.channel IST空?

串行:

LastRss data = new LastRss(); 
XmlSerializer serializer = new XmlSerializer(typeof(LastRss)); 
System.IO.TextReader reader = new System.IO.StringReader(xml); 
try 
{ 
    object o = serializer.Deserialize(reader); 
    data = (LastRss)o; 
} 

回答

3

您的頻道在默認xmlns,即http://purl.org/rss/1.0/

[XmlElement("channel", Namespace = "http://purl.org/rss/1.0/")] 
    public LastChannel channel { get; set; } 

您還需要修正日期格式例如2013-04-15**T**13:27:06

+1

完美!非常感謝! – flo1411

相關問題