2015-04-03 69 views
0

我有一个代码,访问Api链接并检索该值Json并将它们存储在object list。然而,当没有东西可以检索时(链接到Api不存在),它什么都不返回。c#Api Json反序列化时,404,值是错误的

但即使Api链接错误,它仍然返回Json值。这些是他们的默认值,即使没有与请求的ID相匹配的东西,它们也会始终存在。

Correct Api Json value

下面的链接将显示值将始终返回无论什么

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 

      } 
     } 

RootObject类

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

我怎么去走一走,忽略了他们的 “默认” 的JSON值?什么都不做。

+0

您的RootObject是否有一个名为count的属性? – 2015-04-03 21:12:52

+0

是的,它的确如此。 'public int count {get;组; }' – 2015-04-03 21:15:44

+0

不正确API的预期系统行为是什么?你期待它从你的objFromApi_nameToId方法返回一个空对象吗? – 2015-04-03 21:16:50

回答

1

您需要管理代码中的默认值。例如。您无效的API示例将始终将计数返回为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. 
+0

这个伎俩!谢谢! – 2015-04-03 21:35:29