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



这里的JSON有一个奇怪的问题。我正在使用RestSharp(v104.4)从C#代码中调用一个REST web服务,该调用工作正常。

问题是返回的JSON——如果我让RestSharp"自动"解码它——它就不起作用。如果我使用JSON.NET对手动返回的JSON进行反序列化,它就可以正常工作。为什么?

我的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具有RoomUrlnull值。

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

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

在这里,result.RoomUrl可以顺利地获得返回的URL。

我只是有点困惑为什么RestSharp没有正确地将返回的JSON反序列化为JsonResponse对象——有什么想法吗?

我还试着在JsonResponseRoomUrl字符串上放一个[JsonProperty("roomURL")],但这似乎没有什么区别。

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

RestSharp从v103开始不再使用JSON.NET,而是使用自己的JSON反序列化程序,它处理某些事情的方式略有不同。

我得到的JSON响应中的名称roomURL并没有被RestSharp JSON反序列化程序自动"拾取",但在我的响应类上使用DeserializeAs属性解决了问题:

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

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

感谢RestSharp谷歌小组的Andrew Young解决了这个问题!

相关内容

  • 没有找到相关文章

最新更新