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