这里的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
具有RoomUrl
的null
值。
但是,如果我使用JSON.NET手动将响应反序列化为JsonResult
,那么这两条信息(RoomUrl
和Text
)都可以正确识别——根本没有问题。
var result = JsonConvert.DeserializeObject<JsonResponse>(response.Content);
在这里,result.RoomUrl
可以顺利地获得返回的URL。
我只是有点困惑为什么RestSharp没有正确地将返回的JSON反序列化为JsonResponse
对象——有什么想法吗?
我还试着在JsonResponse
的RoomUrl
字符串上放一个[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解决了这个问题!