Существует шаблон (для XmlSerializer), что свойство Foo также будет искать либо «bool FooSpecified», либо «bool ShouldSerializeFoo ()» - и, если найден, сериализует Foo, только если этот другой член возвращает true. Итак, я предполагаю, что agencyIdSpecified никогда не был установлен в true? При удалении этого члена он всегда сериализуется (если вы не добавите [DefaultValue]
или аналогичный).
Этот тип поведения используется для моделирования необязательных значений в случае, когда нам действительно необходимо знать, было ли оно в исходных данных - т.е. имеет ли оно значение 0, потому что вызывающий абонент сказал нам это число, или потому что это просто по умолчанию.
Обратите внимание, что элемент "FooSpecified" обычно имеет [XmlIgnore]
, поэтому XmlSerializer знает, что его не следует рассматривать как данные для сериализации. Это не является необходимым (или на самом деле законным) с «ShouldSerializeFoo ()», так как методы никогда не сериализуются.