WCF: обязательные свойства не требуются - PullRequest
0 голосов
/ 29 октября 2018

Существует некоторое странное поведение, которое невозможно получить с помощью опции 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").

Что не так с моим определением? (или понимание?)

...