Partager via


Nillable Attribute Binding Support

The .NET Framework provides partial binding support for the nillable attribute.

Explanation

When the nillable attribute is set to true in an <element> declaration, it allows an xsi:nil attribute to appear in a conforming element in an XML instance document. (The prefix xsi is commonly used for the XML Schema instance namespace, http://www.w3.org/2001/XMLSchema-instance.)

A value of true for the xsi:nil attribute in an XML element explicitly specifies that the element has no content, whether child elements or body text. The XmlSerializer class equates a true value for the nil attribute with a null reference (Nothing in Visual Basic). See the xsi:nil attribute for how the XmlSerializer class serializes and deserializes the nil attribute, including special cases.

If an element is declared with nillable="false" or no nillable attribute, a nil attribute cannot validly appear in a corresponding instance element, regardless of its value.

Generating the nillable attribute from code

When generating an XML Schema document from a set of classes in an assembly, Xsd.exe create a nillable attribute for a member of a value type if the type is a nullable type. This is because value types can be set to a null reference (Nothing).

For an object of a reference type, Xsd.exe checks the value of certain XML-related attributes' IsNullable property. If the IsNullable property is set to a true value, Xsd.exe creates a nillable attribute and sets its value to true. The IsNullable property is used by certain XML-related attribute classes. The property appears as follows:

An example usage follows:

[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public string NameNullable;

From this code, Xsd.exe generates the following XSD element declaration:

<xs:element minOccurs="1" maxOccurs="1" name="NameNullable" nillable="true" type="xs:string" />

If the IsNullable property is set to true and at run time an applicable object has been set to a null reference (Nothing), the XmlSerializer class generates an xsi:nil attribute with a value of true.

The IsNullable property must be set to true for an attribute applied to a nullable value type.

For reference types, the value of the IsNullable property also determines the value of an <element> element's minOccurs attribute. A true value for IsNullable produces a minOccurs value of 1; otherwise, the value is 0. See the minOccurs attribute.

Xsd.exe also generates a nillable="true" setting in an <element> declaration in certain other circumstances when an IsNullable property is not explicitly set to true.

Generating code from the nillable attribute

When encountering a nillable="true" setting, Xsd.exe generates an IsNullable=true parameter for the appropriate XML-related attribute that is applied to the generated class or member. For value types, nullable types will be generated.

Possible containing elements: <element>

See Also

Reference

XmlSchemaElement.IsNillable
Xsi:nil Attribute Binding Support