检查响应中是否存在值。eBay API [重复]

Check, if value exists in response. eBay API [duplicate]

提问人:Filz 提问时间:5/4/2015 最后编辑:John SaundersFilz 更新时间:5/5/2015 访问量:319

问:

我在开发应用程序时遇到问题。 我正在使用 eBay API 获取有关卖家列出的商品的信息。我使用的调用名为“GetSellerList”。

如果项有可用的 FreeAddedCategory,则响应可能包含名为“CategoryID”(FreeAddedCategory.CategoryID) 的值。您会发现像这样的 XML 作为响应:

<ItemArray>
  <Item>
    <FreeAddedCategory>
      <CategoryID>XXXXXXXXX</CategoryID>
    </FreeAddedCategory>
  </Item>
</ItemArray>

由于此值并不总是返回,因此我收到以下错误消息:

对象引用未设置为对象的实例

我现在想在使用它之前检查此对象是否可用,以防止出现错误。这就是我开始解决问题的方式(但没有成功):

    foreach (ItemType item in apiCall.ApiResponse.ItemArray)
       {
          if (String.IsNullOrWhiteSpace(item.FreeAddedCategory.CategoryID))
                {
                    Console.WriteLine("FreeAdded: Nicht vorhanden!");
                }
        }

但是,此检查也会带来相同的错误消息。我能做些什么来使代码正常工作?逻辑应该是这样的:

IF item.FreeAddedCategory.CategoryID exist
  {
      do everything that needs to be done
  }
ELSE skip;
C# XML SOAP NullReferenceException

评论

0赞 John Saunders 5/5/2015
几乎所有的情况都是一样的。有关一些提示,请参阅“什么是 .NET 中的 NullReferenceException?”NullReferenceException
0赞 Filz 5/5/2015
问题已解决。我在 Chuck 的答案下方写了我的解决方案作为评论。是的,这是一个愚蠢的初学者错误;)不好意思
0赞 hlh3406 7/9/2021
@Filz 6 年后,您的评论帮助我解决了自己的问题。谢谢!!

答:

0赞 Chuck Savage 5/5/2015 #1

尝试:

XElement root = XElement.Load(file); // .Parse(string);
if (root.Descendants("FreeAddedCategory").Any())
{
   // do exists
}
else
{
   // doesn't exist
}

或者,如果这对您的情况更有意义,请使用。CategoryId

评论

2赞 Filz 5/5/2015
嘿查克,感谢您的快速回复。我的错误真的很愚蠢!而不是选中“项目。FreeAddedCategory.CategoryID“对于”null“,我只需要检查”item.FreeAddedCategory”。因为“项目。FreeAddedCategory“是”null“,当我尝试访问”item“时,我确实得到了 NullReferenceException。FreeAddedCategory.CategoryID”。