我在这里遇到了一个奇怪的问题。我正在使用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
,则可以正确识别这两条信息(RoomUrl
和Text
) - 完全没有问题。
var result = JsonConvert.DeserializeObject<JsonResponse>(response.Content);
在这里,result.RoomUrl
可以毫不费力地获取返回的网址。
我有点困惑为什么RestSharp没有正确地反序列化返回到JsonResponse
对象的JSON - 任何想法?
我还尝试在[JsonProperty("roomURL")]
中的RoomUrl
字符串上添加JsonResponse
- 但这似乎没有任何区别。
答案 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解决这个问题!