0

我是 REST/JSON 新手,我正在使用关键字 syria 查询新闻文章的 Feedzilla API

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; }

    }

但是,上面的FZResultfromSearch()方法返回null. 我已经检查了 JSON 格式是否正确并且能够很好地解析它 - 我确信它与类定义和DeserializeAs......

有人可以帮忙吗?

4

1 回答 1

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; }
        }
    }
}
于 2013-05-10T19:52:29.290 回答