在RestSharp将返回内容反序列化到我的类中时,我遇到了一个问题.从我所有的搜索来看,我似乎做得很正确.我宁愿使用RestSharp的反序列化程序,也不愿退回到另一个包,比如Newstonsoft的Json.NET.

我正在做的是向GoTowBinar发出API请求,请求获取所有预定网络研讨会的列表:

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"的列表(如下所示).我收到以下JSON响应2.内容:

[
   {
      "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"
   }
]

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

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

问题在于如何应对.数据总是空的.由于某种原因,反序列化失败了,我不知道为什么.我的目标是能够使用foreach循环迭代结果:

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

你知道为什么反序列化失败了吗?

推荐答案

根据上面@Agacian的建议,我在谷歌上搜索了错误:

根级别的RESTSHARP数据无效.第1行,位置1.

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

基本上,我认为那个客户是错的.Execute将能够自动检测返回内容类型.需要明确设置:

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

这可以在RestSharp的文档中更清楚地引用.希望这能帮到其他人!

Asp.net相关问答推荐

实体框架核心:DBCommand执行得更快,但总时间要慢10倍

ASP.NET Web 应用程序 (.NET Framework) 与 ASP.NET Core Web 应用程序 (.NET Framework) 之间的差异

为什么 ASP.NET Identity 2.0 使用 GUID/字符串作为用户 ID?

在 C# 中以编程方式添加元标记

将 null 转换为字符串的函数

IIS 6/ASP.NET Windows 身份验证 list ?

如何从 web.config 中读取系统值并在 ASP.NET MVC C# 方法中使用

RestSharp 不反序列化 JSON 对象列表,始终为 Null

Webapi、Webhost和Owin的关系

将存储过程中 Select 查询的结果返回到列表

忽略默认文档的表单身份验证

MvcBuildViews true 与 ASP.NET MVC 2 中的实体框架

在 Asp.net mvc5 中使用用户名而不是邮箱作为身份

在 ASP.NET 中实现 404 的最佳方法

从 IFrame 重定向父页面

如何防止aspxerrorpath作为查询字符串传递给 ASP.NET 自定义错误页面

Html.RenderAction 和 Html.Action 的区别

如何调试 w3wp clr.dll 错误

Session.Clear() 与 Session.RemoveAll()

静态变量是线程安全的吗? C#