2013-05-10 3 views
0

Я REST/JSON новичку и я запрашивая Feedzilla API для новостных статей с ключевым словом сирии:Простой Json из RESTful запроса - не в состоянии Deserialize

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

+0

странно. Какой json-сериализатор вы используете? – faester

+0

Restsharp. Этот десериализатор отлично работает для других запросов, которые я выполняю. (например, Stackexchange) – Mikos