[英]Why foreach loop fail with one child element in XML?
通過下面的foreach循環進行解析時,我得到的對象引用未設置為對象的實例。 如果RecordTypeCode的子元素不止一個,它將起作用。 當RecordTypeCode的一個子元素時,它將引發異常。 XML文件可以具有WORKSITE和HOME的RecrdTypeCode。 該文件只有WORKSITE。 使用Newtonsoft Json Linq。
來自XML的JObject人。 錯誤發生在代碼的第二行(if語句)
foreach (JToken item in person.SelectToken("MessageContent.Employee.Addresses.AddressDetail"))
{
if (item.SelectToken("RecordTypeCode").ToString() == "WORKSITE")
{
address = item.SelectToken("AddressLine1").ToString();
address = address + " " + item.SelectToken("AddressLine2").ToString();
//address = address + " " + item.SelectToken("City").ToString();
state = item.SelectToken("StateProvinceCode").ToString();
zip = item.SelectToken("PostalCode").ToString();
}
}
如果我從person.SelectToken(“ MessageContent.Employee.Addresses.AddressDetail”)的字符串中找到了失敗的員工,則會得到:
“ ReferenceObjectCode”:“雇員”,“ AddressType”:“ EmployeeAddressDetail”,“ RecordTypeCode”:“ WORKSITE”,“ AddressLine1”:“ 700 Main St Ste 1100”,“ AddressLine2”:null,“ AddressLine3”:null,“城市“:“堪薩斯城”,“ StateProvinceCode”:“ MO”,“ PostalCode”:“ 64112”,“ County”:“ Jackson”,“ CountryCode”:“ US”,“ UniqueID”:“ ABD4AAB5-7BF0-4814- 21AF-FF639BBB50E2"
這是根據我發現的一些Netwonsoft文檔( https://www.newtonsoft.com/json/help/html/SelectToken.htm )以及基於Brian Rodgers的非常有用的更正評論得出的有根據的猜測。
基本上,SelectToken將返回單個JToken,而不是可以循環遍歷的枚舉(老實說,我不確定您發布的代碼如何用於多個發現;發布的代碼似乎應該總是失敗。)
您需要的是SelectTokens,它返回一個可以循環通過的集合。 (請參閱https://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_Linq_JToken_SelectTokens.htm )
但是,再次,您應該遵循RogerN的評論(這樣,丟失的元素就不會在將來造成崩潰)並將其分解以遵循SRP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.