Существует некоторое странное поведение, которое невозможно получить с помощью опции IsRequired.
Допустим, существует очень маленький DataContract:
[DataContract]
public class CommonEvent
{
[DataMember(IsRequired = true)]
public string Name { get; set; }
[DataMember(IsRequired = false, EmitDefaultValue = false)]
public string Description { get; set; }
}
Когда я запускаю свой WebService и ссылаюсь на него, я получаю следующее xsd:
<xs:complexType name="CommonEvent">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
<xs:element minOccurs="0" maxOccurs="1" name="Description" type="xs:string" />
</xs:sequence>
</xs:complexType>
Но этот XSD не требует имени ... Я прочитал совет по добавлению XmlElement(IsNullable = true)
к имени, но это также не решает проблему, так как определение имени будет следующим: <xs:element minOccurs="1" maxOccurs="1" name="Name" nillable="true" type="xs:string" />
, но все равно не требует никакого значения.
Мое ожидание для требуемого значения было бы так: <xs:element minOccurs="1" maxOccurs="1" name="Name" type="xs:string" />
(по умолчанию для nillable "false").
Что не так с моим определением? (или понимание?)