В WCF вы можете определить контракт, используя атрибуты [DataContract]
и [DataMember]
, например:
[DataContract]
public class Sample
{
[DataMember(EmitDefaultValue = false, IsRequired = false)]
public string Test { get; set; }
}
В этой статье на MSDN говорится, что использование EmitDefaultValue = false
не рекомендуется:
Однако мне нравится использовать это, потому что XML, сгенерированный с помощью этой конструкции, чище. Не указание этого параметра приводит к:
<Sample>
<Test xsi:nil="true"/>
</Sample>
при использовании настройки элемент опускается, когда нет значения:
<Sample>
</Sample>
Мне любопытно, какова причина этого утверждения. В частности, поскольку оба фрагмента XML выглядят эквивалентно мне (и обе последние части могут быть правильно десериализованы для этого контракта).
Какова причина этого утверждения?