В C# при обработке XML, который содержит элементы, которые определены в схеме как nillable="true"
, так и minOccurs="0"
, что является самым изящным решением рассказать элемент nil из пропущенного элемента?Обработка - Элемент xsi: nil vs. no element
Вариант использования - ситуация, когда служба получает XML-фрагмент, содержащий элементы, представляющие все поля изменяемой записи, но ни одно из полей, которые не были изменены.
Например, когда запись изменяется от { a: 1; b: 2; c: 3; }
к { a: 1; b: 4; c: null }
, служба может получить:
<change>
<b>4</b>
<c xsi:nil="true" />
</change>
Когда запись изменений от { a: 1; b: 2; c: 3; }
(идентичны) { a: 1; b: 4; c: 3 }
(без изменений для «с»), услуги может получить:
<change>
<b>4</b>
</change>
Однако в C# эти два фрагмента с другим значением как карты на объект, который выглядит как { a: null; b: 4; c: null; }
. При анализе XML информация о том, что c явным образом равна нулю или просто отсутствует, теряется. Мы не уверены в том, что для a и b необходимо установить значение null или оставить нетронутым.
В этом примере вы можете предположить, что сообщение должно содержать все поля, чтобы избежать путаницы (а также что-то, чтобы идентифицировать меняющуюся запись), но мы имеем дело с фактическими сообщениями о огромных записях, где необходимо только отправить актуальное. И мы имеем дело не только с целыми полями, но и со всеми типами простых и сложных типов.
Я считаю фрагменты XML довольно элегантными и понятными, но что является самым элегантным и понятным решением, которое вы предложили бы при их обработке в приложении C#?
Я не получаю ваш 'minOccurs = 0' в вашем сообщении, вы можете привести пример и то, что он представляет? –