2013-05-10 22 views
0

我REST/JSON的新手,我查詢新聞文章Feedzilla API,使用關鍵字敘利亞簡單的JSON從REST風格的查詢 - 無法反序列化

http://api.feedzilla.com/v1/categories/26/articles/search.json?q=syria

public FZResult Search(string query) 
    { 
     //_client.BaseUrl = string.Format("http://api.feedzilla.com/v1/categories/26/articles/search.json}", StackExchangeSite); 
     _client.BaseUrl = string.Format("http://api.feedzilla.com/v1/categories/26/articles/search.json"); 

     RestRequest request = new RestRequest(); 

     //Required 
     request.AddParameter("q", "syria"); 

     //Output 
     RestResponse response = (RestResponse)_client.Execute(request); 

     IDeserializer deserializer; 
     deserializer = new JsonDeserializer(); 

     //The format that Wikipedia uses 
     deserializer.DateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"; 

     FZResult results = deserializer.Deserialize<FZResult>(response); 

     return results; 
    } 

FZResult類是什麼樣子這個:

public class FZResult 
    { 
     [DeserializeAs(Name = "items")] 
     public List<ResultItem> Items { get; set; } 

    } 

我的ResultItem類看起來像這樣:

public class ResultItem 
    { 
     [DeserializeAs(Name = "title")] 
     public string title { get; set; } 

     [DeserializeAs(Name = "url")] 
     public string url { get; set; } 

    } 

然而,從FZResult方法Search()上述返回null。我已經檢查過JSON格式是否正確並能夠解析它 - 我確定它與類定義有關& DeserializeAs ...

有人可以幫忙嗎?

回答

2

你的問題似乎是FZResult類。如果您查看從服務返回的json,則根元素是一個名爲articles的數組。你的課有[DeserializeAs(Name = "items")],這可能會混淆反序列化引擎,因爲Name應該是articles

嘗試更改這些值並檢查新結果。

遺憾的是我還沒有試過RestSharp。下面的代碼使用Newtonsoft.JSON和常規HttpWebRequest來獲得結果。我已經證實它正在工作。

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Net; 
using System.Runtime.Serialization; 

namespace FeedZilla 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://api.feedzilla.com/v1/categories/26/articles/search.json?q=syria"); 

      using (var responseStream = request.GetResponse().GetResponseStream()) 
      { 
       using (var reader = new StreamReader(responseStream)) 
       { 
        var fzResult = Newtonsoft.Json.JsonConvert.DeserializeObject<FZResult>(reader.ReadToEnd()); 

        fzResult.Articles.ForEach(a => Console.WriteLine("{0} {1}", a.Title, a.Url)); 
       } 
      } 
     } 

     [DataContract] 
     public class FZResult 
     { 
      [DataMember(Name = "articles")] 
      public List<Article> Articles { get; set; } 
     } 

     public class Article 
     { 
      [DataMember(Name = "title")] 
      public string Title { get; set; } 

      [DataMember(Name = "url")] 
      public string Url { get; set; } 
     } 
    } 
} 
+0

謝謝,我確實嘗試改爲'文章'。沒有骰子: -/ – Mikos 2013-05-10 19:54:00

+0

奇怪。你正在使用哪個json序列化程序? – faester 2013-05-10 19:55:23

+0

Restharp。該解串器對我正在執行的其他查詢正常工作。 (例如Stackexchange) – Mikos 2013-05-10 19:56:41