2015-04-06 45 views
0

我有一个函数,它接受来自Api link的所有Json值,并将它们全部反序列化为对象列表。我需要比较该object listall ID values listed here之间的ID value。然而使用我使用的功能on the other Api link不起作用,因为返回Json结构,这一个没有。c#如果Web链接上不存在ID值,则从列表中删除对象

// parameters given are "http://www.gw2spidy.com/api/v0.9/json/item-search/iron/" + "1" 
var spidyApi_idByName = api_Handler.objFromApi_idToName(spidyApiUrl, startPage); 

,其中上面的代码中调用

public static RootObject objFromApi_idToName(string spidyApiUrl, int page) 
     { 
      RootObject rootObject = null; 
      RootObject tempRootObject = null; 

      do{ 
       HttpWebRequest request = (HttpWebRequest)WebRequest.Create(spidyApiUrl + "/" + page); 

       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(); 
        tempRootObject = serializer.Deserialize<RootObject>(jsonReader); 

        if (rootObject == null){ 
         rootObject = tempRootObject; 
        } 
        else{ 
         rootObject.results.AddRange(tempRootObject.results); 
         rootObject.count += tempRootObject.count; 
        } 
       } 
       page++; 
      } 

      while (tempRootObject != null && tempRootObject.last_page != tempRootObject.page); 
      return rootObject; 
     } 

我如何检查ID值spidyApi_idByName exist here,如果他们不从对象列表中删除的功能。

编辑,更一般的信息:

我有一个文本框,您可以输入您的搜索。然后发送到Api链接以将文本转换为与搜索匹配的项目的ID。搜索铁的示例将返回all these values。不过,我需要检查这些项目是否可销售,有两种做法。

I can access this link,这些都是可销售的所有ID,并检查对象列表中的哪个项目ID不存在于上面的链接中。

或者取对象列表中的Item ID,并从不同的Api链接中检索更多信息。该链接包含一个名为Flags的属性,如果此属性的值为“NoSell”,则应将其从对象列表中删除。 Example link,这个项目有财产标志与价值NoSell

短:将文本翻译成项目ID,检查此ID是否可销售。

+0

指定更多详细信息一般情况下你想做什么,没有实现细节。像“我如何比较两个集合与某些规则”或“我如何从一个集合中排除其他项目”。 – Yura 2015-04-06 12:53:31

+0

@Yura我已经编辑了我的问题,更详细地描述了我所要求并试图实现的内容。希望它有帮助 – 2015-04-06 13:07:04

回答

1

这里是你怎么从你https://api.guildwars2.com/v2/commerce/listings链接获取ID列表:

List<string> ids = new List<string>(); 
    HttpWebRequest request = 
        (HttpWebRequest)WebRequest.Create("https://api.guildwars2.com/v2/commerce/listings"); 
       try 
       { 
        WebResponse response = request.GetResponse(); 
        using (Stream responseStream = response.GetResponseStream()) 
        { 
         using (var reader = new StreamReader(responseStream)) 
         { 
          ids = reader.ReadToEnd().TrimStart('[').TrimEnd(']').Split(',').Select(str => str.Trim()) 
           .ToList(); 
         } 
        } 
       } 
       catch (Exception) 
       { 

        throw; 
       } 
return ids; 

这不是一个JSON,这是一个逗号分隔字符串。所以你需要解析它以获得id的列表。

+0

我看到这是怎么回事,但我如何返回此值的函数调用?我试图在try之外定义id,但'local variables must be initialized' – 2015-04-06 13:18:33

+0

我编辑了我的帖子。这回答了你的问题了吗? – 2015-04-06 13:41:22

+0

我有返回的错误,我不能将字符串转换为rootObject,这可能是由于该函数返回RootObject的事实。但我不知道我应该写什么函数作为回报。 '公共静态RootObject objFromApi_idExistListings(字符串gw2ApiUrl)' – 2015-04-06 13:45:52