有一个服务器,在出现无效请求的情况下,会返回一个JSON表示类型对象的反序列化字符串EXCEPTION。根据错误的类型,对象可以具有与简单对象完全不同的结构:
public class simpleException
{
public string Reason {get;set;}
public string Controller {get;set;}
}
要处理收到的响应并了解异常究竟发生了什么,有一个方法:
try
{
var Err = JsonConvert.DeserializeObject<simpleException>(responsedBodyStr);
}
catch (JsonSerializationException)
{
try
{
var Err = JsonConvert.DeserializeObject<TrsException>(responsedBodyStr);
}
catch(JsonSerializationException)
{
try {....
}
}
try-catch还有更多的嵌套级别,它们变成了可怕的意大利面条代码。 其实问题是——如果你也遇到过类似的情况,那么就如何改进代码分享你的建议?
upd 我得到这样的异常行:
catch (WebException ex)
{
ExcStr= new StreamReader(ex.Response.GetResponseStream()).ReadToEnd(),
作为第一个近似值,将嵌套扩展为循环。天真的例子:
复合处理器收集异常处理程序并运行它们
如何使用
结果,添加处理程序成为一件基本的事情。Try-catch 可以填充到处理程序中,处理程序可以使用 CanProcess 方法制成一个类,并且可以做更多事情,具体取决于任务
JSON对象必须有某种错误代码,或者必须根据HTTP代码进行区分,或者继承。尝试这样猜测是非常愚蠢的,尤其是通过完整的解析和异常。
解决方案可能是LINQ to JSON: