У меня есть служба WCF, использующая класс, который правильно помечен как DataContract. В этом контракте данных (который является структурным типом) у меня есть Префиксное свойство определено:
[DataContract(Name = "myIdentifier")]
[Serializable]
public struct MyIdentifierExtern {
/// <summary>Gets or sets the identifier.</summary>
/// <value>The identifier.</value>
[DataMember(Name = "id", IsRequired = true, EmitDefaultValue = true, Order = 2)]
[XmlElement(ElementName = "id", IsNullable = false, Order = 2)]
public int Id { get; set; }
/// <summary>Gets or sets the prefix.</summary>
/// <value>The prefix.</value>
[DataMember(Name = "prefix", IsRequired = true, EmitDefaultValue = true, Order = 1)]
[XmlElement(ElementName = "prefix", IsNullable = false, Order = 1)]
[MaxLength(1)]
[MinLength(1)]
public string Prefix { get; set; }
...
Однако полученный WSDL (от доступа к службе по настроенному URL-адресу с помощью запроса ".... svc? SingleWsdl") возвращает:
<xs:complexType name="myIdentifier">
<xs:annotation>
<xs:appinfo>
<IsValueType xmlns="http://schemas.microsoft.com/2003/10/Serialization/">true</IsValueType>
</xs:appinfo>
</xs:annotation>
<xs:sequence>
<xs:element name="prefix" nillable="true" type="xs:string"/>
<xs:element name="id" type="xs:int"/>
</xs:sequence>
</xs:complexType>
Почему префикс объявлен как nillable?