【发布时间】:2016-04-07 17:46:16
【问题描述】:
我一直在用 C# 编写一个工具,它通过表 REST API 对 ServiceNow 进行几次调用。我正在使用 RESTsharp 进行 REST 调用,并使用 JSON.net 反序列化结果。这对于不返回错误的查询似乎非常有效。
try
{
DataSet dataset = JsonConvert.DeserializeObject<DataSet>(response.Content);
results = dataset.Tables["result"];
return (results);
}
catch (Exception e)
{
....
}
但是,当返回错误(例如未找到结果)时,我在尝试解析错误时收到了意外的令牌异常。 “读取 DataTable 时出现意外的 JSON 令牌。预期 StartArray,得到 StartObject”
返回的确切 JSON 如下:
{
"error": {
"message": "No Record found"
"detail": "Records matching query not found. Check query parameter or offset parameter"
}
"status": "failure"
}
我已经阅读了一些类似的问题并尝试制作自己的课程,但我不太确定应该如何实现它。
【问题讨论】:
-
收到错误消息时,是否会以不同的方式返回 HTTP 状态代码?如果是这样,您可以检查响应的状态代码并根据状态代码以不同的方式反序列化您的响应。您可以创建一个简单的类来匹配错误对象 - 只需匹配返回的 json 的属性。
-
是的,我希望它会返回 404 或其他内容,但上面的文字只是 200 OK。
-
我对这种方法不是 100% 满意,但如果它们总是返回 200,你总是可以尝试反序列化到你自己的 catch 块中的“错误”对象。专门捕获
UnexpectedTokenException并尝试反序列化为错误对象。将通用的catch (Exception e)也保留在那里。 -
其实我说的不对。我刚刚再次检查,它确实返回 404。所以是的,我可以通过检查 HTTP 状态来解决这个问题。
-
酷,您知道如何反序列化为
Error类吗?或者您需要帮助吗?
标签: c# json rest servicenow