2012-07-25 51 views
1

我正在使用the HttpClient that is available on NuGet使用HttpClient,我該如何幹淨地讀取和反序列化RSS提要?

這是我開始的代碼:

string url = "http://example.com/rssfeed.rss"; 
HttpClient client = new HttpClient(); 
client.DefaultRequestHeaders.UserAgent.Clear(); 
client.DefaultRequestHeaders.Add("User-Agent", "CheesoTest"); 
var task = client.GetAsync(url); 
try 
{ 
    task.Wait(); 
    HttpResponseMessage resp = task.Result; 

    var t2 = resp.Content.ReadAsAsync<RSS.Feed>(); 
    t2.Wait(); 
    var result = t2.Result; 
} 
catch (Exception e1) 
{ 
    MessageBox.Show("Exception: " + e1.ToString()); 
} 

問題:

  1. 我必須明確地定義RSS.Feed與DataContract /的DataMember屬性裝飾。它確實看起來像一個RSS類應該內置。是嗎? (也許我只是不知道它)

  2. 這會失敗,並抱怨RSS源中的處理指令異常。它實際上是一個樣式表,我不關心它。我只想要數據。

唯一的例外是:

異常:System.AggregateException:出現一個或多個錯誤。 ---> System.InvalidOperationException:XML文檔(1,2)中存在錯誤。 ---> System.Xml.XmlException:不支持處理指令(XML聲明除外)和DTD。 1號線,2位

飼料的樣子:

<?xml version="1.0"?> 
<?xml-stylesheet type="text/xsl" href="/rss.xsl"?> 
<rss version="2.0"> 
    <channel><title>blah foo fizz bang</title>.... 

一個更好的方式來做到這一點任何提示?使用HttpClient!

我發現文檔有點薄。

回答

0

另外,你有沒有看過WCF的SyndicationFeed? System.ServiceModel.dll有一個SyndicationFeed.Load(XmlReader)方法,可以將一個訂閱源反序列化爲一個SyndicationFeed對象。