c# Api Json反序列化404时,值是错误的

c# Api Json deserializes when 404, values are wrong

我有一个代码可以访问 Api link 并检索 Json 值并将它们存储在 object list 中。然而,当没有任何东西可以检索时(Link 到 Api 不存在)它 return 什么都没有。

然而,即使 Api link 是错误的,它仍然 returns Json 值。这些是它们的默认值,即使没有与请求的 ID 匹配的内容也将始终存在。

Correct Api Json value

link 下方将显示无论如何都会 return 的值

INCorrect Api Json value

这里是我调用 Api

的地方
var spidyApi_idByName_result = api_Handler.objFromApi_nameToId(spidyApi_searchIdByName);

此处 Api 被访问并且 Json 被反序列化。

public RootObject objFromApi_nameToId(string url){
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            try{
                WebResponse response = request.GetResponse();
                using (Stream responseStream = response.GetResponseStream()){
                    StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
                    var jsonReader = new JsonTextReader(reader);
                    var serializer = new JsonSerializer();
                    return serializer.Deserialize<RootObject>(jsonReader);
                }
            }
            catch (WebException){
                throw;
                // used throw as otherwise i can not run code, function requires every path to return
                // Catch never gets called

            }
        }

根对象class

public RootObject GetApi(string url)
{
    // ...
    return serializer.Deserialize<RootObject>(jsonReader);
}

我如何四处走动并忽略它们的 "default" json 值?什么都不做。

您需要管理代码中的默认值。例如。您的无效 API 示例将始终 return 计数为 0。您现在可以使用该条件来决定您的程序流程。

RootObject rootObject = serializer.Deserialize<RootObject>(jsonReader);

if (rootObject.count > 0)
    return rootObject;
else
    return null; //or any other program flow you need to execute.