3

处理 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);

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

4

2 回答 2

2

我会坚持使用 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);
于 2013-07-17T07:10:25.750 回答
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));

        ***
        }
于 2013-05-02T16:18:01.863 回答