RestSharp反序列化服务器端错误

3

错误处理RestSharp问题。

如果我的请求本身存在错误,则服务器会返回另一个Json响应,该响应应被反序列化为另一个POCO对象。我应该在哪里处理这个?

例如,正常的响应:

{status: 100, message: { ** list of items ** }}

错误答案:

{status: 404, message: { ** error details ** }}

这两个POCO是不同的(虽然可能有一个共同的父类带有状态),因此应该以不同的方式解析(如果能读取状态并选择如何反序列化结果,那就太完美了)。

我正在使用带有wp7异步库的RestSharp,所以请求看起来像:

var response = await client.ExecuteAsync<NormalPOCO, ErrorPOCO>(request);

但是我在哪里可以覆盖反序列化本身呢?

2个回答

3

我建议你仍然使用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);

0

最终我通过使用HttpWebRequest手动发送请求,结合异步和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));

        ***
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接