RestSharp不反序列化JSON对象列表,总是空(RestSharp not deseriali

2019-07-29 03:42发布

我在与RestSharp反序列化回报内容到我班的一个问题。 从我所有的搜索,似乎我正确的事情了。 我宁愿用RestSharp的解串器比有回落到另一个包像Newstonsoft的Json.NET。

什么我做的是作出API请求GoToWebinar为计划网络研讨会的所有名单:

var client = new RestClient(string.Format("https://api.citrixonline.com/G2W/rest/organizers/{0}/upcomingWebinars", "300000000000239000"));
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "OAuth oauth_token=" + System.Configuration.ConfigurationManager.AppSettings["GoToWebinar"]);
var response2 = client.Execute<List<RootObject>>(request);

正如你看到的,我想获得对象RootObject“列表(如下图所示)。 我收到的response2.Content以下JSON响应:

[
   {
      "webinarKey":678470607,
      "subject":"Easton's Wild Rice Cooking Demo",
      "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
      "organizerKey":300000000000239551,
      "times":[{"startTime":"2012-05-09T15:00:00Z","endTime":"2012-05-09T16:00:00Z"}],
      "timeZone":"America/Denver"
   },
   {
      "webinarKey":690772063,
      "subject":"Easton's Match Making Service",
      "description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
      "organizerKey":300000000000239551,
      "times":[{"startTime":"2012-05-09T15:00:00Z","endTime":"2012-05-09T16:00:00Z"}],
      "timeZone":"America/Denver"
   }
]

我创建使用以下对象http://json2csharp.com使用上面的JSON结果:

public class RootObject
{
    public int webinarKey { get; set; }
    public string subject { get; set; }
    public string description { get; set; }
    public long organizerKey { get; set; }
    public List<Time> times { get; set; }
    public string timeZone { get; set; }
}

public class Time
{
    public string startTime { get; set; }
    public string endTime { get; set; }
}

问题是response2.Data总是空。 出于某种原因,反序列化失败,我不知道为什么。 我的目标是能够使用foreach循环遍历结果迭代:

foreach(RootObject r in response2.Data)
{
    lblGoToWebinar.Text += r.webinarKey.ToString() + ", ";
}

为什么反序列化失败的任何想法?

Answer 1:

基于以上@ agarcian的建议下,我用Google搜索的错误:

在根级restsharp数据是无效的。 1号线,位置1。

并且发现这个论坛: http://groups.google.com/group/restsharp/browse_thread/thread/ff28ddd9cd3dde4b

基本上,我是错误的假设client.Execute将是能够自动检测返回的内容类型。 它需要显式设置:

var request = new RestRequest(Method.GET);
request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json"; };

这可能RestSharp文档中更清楚地被引用。 希望这会帮助别人了!



Answer 2:

迟到了:你需要找到你得到响应的实际内容类型。 服务器不一定与任何类型的内容,从您的请求的接受头回应。 对于谷歌的API我有一个text / plain的响应,所以这从小组建议为我工作。

public T Execute<T>(string url, RestRequest request) where T : new()
{
    var client = new RestClient();
    // tell RestSharp to decode JSON for APIs that return "Content-Type: text/plain"
    client.AddHandler("text/plain", new JsonDeserializer());
    ...

这也是整洁,如果它可以在一个地方进行,如共享执行上述方法中,而不是强迫响应类型与OnBeforeDeserialization哪里创建的每个请求。



文章来源: RestSharp not deserializing JSON Object List, always Null