2015-04-03 71 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