RestSharp无法正确自动反序列化我的JSON响应 - 但JSON.NET可以 - 为什么?

时间:2014-09-09 08:28:18

标签: json json.net restsharp

我在这里遇到了一个奇怪的问题。我正在使用RestSharp(v104.4)从我的C#代码调用REST Web服务,并且调用正常。

问题在于返回的JSON - 如果我让RestSharp“自动”解码它 - 它不起作用。如果我反序列化JSON,我会使用JSON.NET手动返回,它可以正常工作。为什么呢?

我的RestSharp请求:

RestRequest request = new RestRequest(MyUrl, Method.GET);
request.AddHeader("Authorization", "Bearer " + token);

IRestResponse<JsonResponse> response = _restClient.Execute<JsonResponse>(request);

这是我从这个电话中回来的原始JSON:

{ "roomURL":"https://dev.mycompany.com/room/abc123", "text":"Click here. ....." }

使用这个类,我试图让RestSharp自动反序列化这个响应:

public class JsonResponse {
    public string RoomUrl { get; set; }
    public string Text { get; set; }
}

但是使用RestSharp - response.Data我得到null的值RoomUrl

但是,如果我使用JSON.NET手动将响应反序列化为JsonResult,则可以正确识别这两条信息(RoomUrlText) - 完全没有问题。

var result = JsonConvert.DeserializeObject<JsonResponse>(response.Content);

在这里,result.RoomUrl可以毫不费力地获取返回的网址。

我有点困惑为什么RestSharp没有正确地反序列化返回到JsonResponse对象的JSON - 任何想法?

我还尝试在[JsonProperty("roomURL")]中的RoomUrl字符串上添加JsonResponse - 但这似乎没有任何区别。

1 个答案:

答案 0 :(得分:3)

在发布到RestSharp Google Group后问题已解决。

从版本103开始,RestSharp不再使用JSON.NET,而是它自己的JSON反序列化器 - 它可以稍微区别地处理某些事情。

我收到的JSON响应中的名称roomURL并未自动“拾取”#34;通过RestSharp JSON反序列化器 - 但在我的响应类中使用DeserializeAs属性解决了这个问题:

public class JsonResponse {
    [DeserializeAs(Name = "roomURL")]
    public string RoomUrl { get; set; }
    public string Text { get; set; }
}

现在我的请求的JSON响应会按预期自动反序列化,我可以继续使用它。

感谢RestSharp Google Group的Andrew Young解决这个问题!