Почему цикл foreach завершается с одним дочерним элементом в XML? - PullRequest
0 голосов
/ 08 октября 2018

Я получаю ссылку на объект, не установленную на экземпляр объекта, при разборе через цикл foreach ниже.Это работает, если есть более одного дочернего элемента RecordTypeCode.Когда один дочерний элемент RecordTypeCode выдает исключение.Файл XML может иметь RecrdTypeCode WORKSITE и HOME.Этот файл имел только РАБОЧИЙ САЙТ.Использование Newtonsoft Json Linq.

JObject person из XML.Ошибка возникает во второй строке кода (оператор 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," City ":" Kansas City "," StateProvinceCode ":" MO "," PostalCode ":" 64112 "," County ":" Джексон "," CountryCode ":" US "," UniqueID ":"ABD4AAB5-7BF0-4814-21AF-FF639BBB50E2"

1 Ответ

0 голосов
/ 08 октября 2018

Это немного обоснованное предположение, основанное на найденной мною документации Netwonsoft (https://www.newtonsoft.com/json/help/html/SelectToken.htm),, а также очень полезный корректирующий комментарий Брайана Роджерса.

По сути, SelectToken вернет одинJToken, не перечисляемый, который вы можете циклически проходить (я не уверен, как код, который вы опубликовали, работает для нескольких находок, если честно; опубликованный код выглядит так, как будто он всегда должен давать сбой.)

То, что вы хотите, этоSelectTokens, который возвращает коллекцию, которую вы можете циклически просмотреть (см. https://www.newtonsoft.com/json/help/html/M_Newtonsoft_Json_Linq_JToken_SelectTokens.htm)

Хотя, опять же, вы должны следовать комментарию RogerN (чтобы отсутствующий элемент не вызывал сбой в будущем) и разбить еговниз, чтобы следовать SRP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...