RestSharp问题处理错误。
如果我在请求本身有一个错误,服务器返回另一个Json答案,它应该被取消到另一个POCO对象。我能在哪里处理?
例如,正常答案:
{status: 100, message: { ** list of items ** }}
错误回答:
{status: 404, message: { ** error details ** }}
所以,它们是2个不同的poco(虽然,可以有一个父状态),所以它们应该以不同的方式解析(这将是完美的,如果我能够读取状态,并选择如何反序列化结果)。
我使用RestSharp与wp7异步库,所以我看到的请求为
var response = await client.ExecuteAsync<NormalPOCO, ErrorPOCO>(request);
但是我在哪里可以重写反序列化本身?
我会坚持使用RestSharp,尽管它不支持这种条件反序列化。
class StatusPOCO { public int Status { get; set; } }
class NormalPOCO : StatusPOCO { ... }
class ErrorPOCO : StatusPOCO { ... }
var response = await client.ExecuteAsync<StatusPOCO>(request);
// restsharp's deserializer:
IDeserializer deserializer = new JsonDeserializer();
if (response.Data.status != 100)
error = deserializer.Deserialize<ErrorPOCO>(response);
else
normal = deserializer.Deserialize<NormalPOCO>(response);
我最终通过HttpWebRequest +使用async和Json.net发送手动请求。它看起来像这样
var stringResult = await productSearchDataService.LaunchSearchAsync(name, label); // Sends HttpWebRequest
if (String.IsNullOrEmpty(stringResult )) { return; } // TODO: notify no internet
var status = (int)JObject.Parse(stringResult)["status"];
if (status != 100) { return; } // TODO: notify some shit happened
try
{
private var parsedResult = await TaskEx.Run(() => JsonConvert.DeserializeObject<NormalAnswerPoco>(stringResult));
***
}