请检查以下C#代码。在这里,我从以下xml示例中获取UPC的值,EAN值。但是当前代码的问题是UPC一段时间,xml中没有EAN值,然后出现错误-未将对象设置为实例...所以我的问题是,在尝试之前,如何检查UPC EAN是否为null抓住它的价值?所以我不会得到这种丢失的数据错误?有什么想法要解决吗?
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>
答案 0 :(得分:2)
您正在使用FirstOrDefault()
,这表明您知道它可能不存在-但是您无条件地在使用Value
属性,如果{ {1}}返回null。
两个选项:
使用空条件运算符:
NullReferenceException
使用从FirstOrDefault()
到UPC = doc.Descendants(ns + "UPC").FirstOrDefault()?.Value;
的显式转换,它将为空输入返回空输出:
XElement
在两种情况下,如果没有这样的元素,string
最终将为null。