处理反序列化json时的错误

时间:2018-01-11 11:27:09

标签: c# json json.net deserialization json-deserialization

我的问题主要是这样的: 我有一个API的输出,返回一个带有任何消息的名为“error”的元素的json。当我试图反序列化我的对象并且服务器返回错误时,我得到了这个json而不是我的json对象(产品,订单......)。

这是发生错误的代码:

try
{
    using (var response = (HttpWebResponse)requisicao.GetResponse()) // **here happens the exception**
    {
        using (var stream = new StreamReader(response.GetResponseStream()))
            retorno = JsonConvert.DeserializeObject<TModelo>(stream.ReadToEnd());
    }
}

所以...我想得到这个消息错误,但我无法处理(反序列化)它,因为它让我得到一个例外。 如果我可以反序列化对象,我可能会收到错误消息,因为代表我的对象的实体继承了错误对象(下面这个)

public class Erro
{
    [JsonProperty("error")]
    string MensagemErro { get; set; }
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您在收到回复时遇到错误;

(HttpWebResponse)requisicao.GetResponse()

这意味着服务器没有向您返回正确的消息。因此,没有反序列化的响应消息,唯一的选择是在catch块中处理错误。

它看起来像;

try
{
    using (var response = (HttpWebResponse)requisicao.GetResponse()) // **here happens the exception**
    {
        using (var stream = new StreamReader(response.GetResponseStream()))
            retorno = JsonConvert.DeserializeObject<TModelo>(stream.ReadToEnd());
    }
}
catch (WebException e)
{
    WebResponse response = e.Response;
    using (StreamReader reader =
        new StreamReader(response.GetResponseStream()))
    {
        string text = reader.ReadToEnd();//Content of error message
    }
}