簡體   English   中英

為什么foreach循環在XML中只有一個子元素失敗?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM