带有HttpClient但JSON响应未知的REST api

带有HttpClient但JSON响应未知的REST api,json,dotnet-httpclient,Json,Dotnet Httpclient,我正在使用WebApi httpclient构建一个.NETAPI库,用于REST Web服务 rest服务返回JSON 我遇到的问题是,对于一个请求,可能会返回不同的JSON格式 如果查询成功,我会返回一个JSON数组,我已经创建了一个强c#type来保存它 使用ReadAsAsync方法将其从内容中取出 如果请求中存在错误的api密钥或发生其他错误,rest服务将返回一个JSON对象,其中包含一些属性,如status=error和解释消息等 我不能仅仅使用ReadAsAsync方法,因为我不

我正在使用WebApi httpclient构建一个.NETAPI库,用于REST Web服务

rest服务返回JSON

我遇到的问题是,对于一个请求,可能会返回不同的JSON格式

如果查询成功,我会返回一个JSON数组,我已经创建了一个强c#type来保存它

使用ReadAsAsync方法将其从内容中取出

如果请求中存在错误的api密钥或发生其他错误,rest服务将返回一个JSON对象,其中包含一些属性,如status=error和解释消息等

我不能仅仅使用ReadAsAsync方法,因为我不知道返回的是什么格式。我对JSON linq库了解不多,但有没有办法将JSON响应放入某个JSON holder对象中,然后检查其中是否存在status=错误,然后对我的强类型使用正确的反序列化

我似乎能够将它存储在JRaw对象中,但不知道从这里开始该往哪里去

非常感谢

如果请求中存在错误的api密钥或发生其他错误,rest服务将返回一个JSON对象,其中包含一些属性,如status=error和解释消息等

在这种情况下,返回的状态代码将不会成功。您可以检查状态代码,然后适当地反序列化响应内容:

        if (httpResponseMessage.IsSuccessStatusCode)
        {
           // Deserialize your JSON array
        }
        else
        {
           // Deserialize the error
        }
如果请求中存在错误的api密钥或发生其他错误,rest服务将返回一个JSON对象,其中包含一些属性,如status=error和解释消息等

在这种情况下,返回的状态代码将不会成功。您可以检查状态代码,然后适当地反序列化响应内容:

        if (httpResponseMessage.IsSuccessStatusCode)
        {
           // Deserialize your JSON array
        }
        else
        {
           // Deserialize the error
        }

在这种情况下,可以使用错误处理

try
{
      //Deserialize your JSON Array..this will throw an exception in case of type mismatch
}
catch(Exception e)
{
     //Deserialize your JSON object which will give you Error code or message
}

在这种情况下,可以使用错误处理

try
{
      //Deserialize your JSON Array..this will throw an exception in case of type mismatch
}
catch(Exception e)
{
     //Deserialize your JSON object which will give you Error code or message
}