重启反序列化服务器端错误



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));
        ***
        }

相关内容

最新更新