请检查下面的 c# 代码。在这里,我从以下 xml 示例中获取 UPC、EAN 值的值。但当前代码的问题是有一段时间 UPC,EAN 值在 xml 中不可用,然后我得到错误 - 对象未设置为实例......所以我的问题是我如何在尝试之前检查 UPC EAN 如果为空抢夺它的价值?所以我没有得到这样的缺失数据错误?有什么解决办法吗?C# 代码:Stream requestStream = request.GetRequestStream();requestStream.Write(bytes, 0, bytes.Length);requestStream.Close();using (var response = (HttpWebResponse)request.GetResponse()){ if (response.StatusCode == HttpStatusCode.OK) { Stream responseStream = response.GetResponseStream(); string responseStr = new StreamReader(responseStream).ReadToEnd(); responseStream.Flush(); responseStream.Close(); XDocument doc = XDocument.Parse(responseStr); XNamespace ns = doc.Root.GetDefaultNamespace(); string UPC = ""; string EAN = ""; if (doc.Descendants(ns + "Ack").FirstOrDefault().Value != "Failure") { UPC = doc.Descendants(ns + "UPC").FirstOrDefault().Value; EAN = doc.Descendants(ns + "EAN").FirstOrDefault().Value; }XML:<?xml version="1.0" encoding="UTF-8"?><GetItemResponse xmlns="urn:ebay:apis:eBLBaseComponents"><Timestamp>2018-08-04T09:36:11.502Z</Timestamp><Ack>Success</Ack><Version>1069</Version><Build>E1069_CORE_API_18748854_R1</Build><Item> <ProductListingDetails> <ISBN>Does not apply</ISBN> <UPC>732030007789</UPC> <BrandMPN> <Brand>Ommani</Brand> <MPN>H0149-OM</MPN> </BrandMPN> <IncludeeBayProductDetails>true</IncludeeBayProductDetails> </ProductListingDetails></Item></GetItemResponse>错误图片:
1 回答
波斯汪
TA贡献1811条经验 获得超4个赞
您正在使用FirstOrDefault()
,这表明您知道它可能不存在 - 但是您无条件地推迟使用该Value
属性,这将导致NullReferenceException
ifFirstOrDefault()
返回 null。
两种选择:
使用空条件运算符:
UPC = doc.Descendants(ns + "UPC").FirstOrDefault()?.Value;
使用从
XElement
to的显式转换string
,这将为空输入返回空输出:UPC = (string) doc.Descendants(ns + "UPC").FirstOrDefault();
在这两种情况下,UPC
如果没有这样的元素,最终都会为 null。
- 1 回答
- 0 关注
- 188 浏览
添加回答
举报
0/150
提交
取消