Like the enum element, the struct element has a single mandatory attribute, name. The name is used when referring to the structure from other derived type or interface definitions. A struct contains one or more field elements, one for each field of the structure. A field element has a mandatory name attribute that gives the field a symbolic name. The symbolic name isn't used elsewhere in the API definition, only in the server and various client environments. In addition to a name, each field must specify a type.
You can define the type of a field in multiple ways. If a field is a plain base type, that type is defined with a type attribute. If a field is a derived type defined elsewhere in the API document, that type is defined with a typeref attribute. If a field is an array of some type (base or derived), that type is defined with a nested list element. The type of the array is defined in the same fashion as the type of the field: either with a type attribute, a typeref attribute, or another nested list element.
A field's value may be declared nullable by setting the field element's nullable attribute to true.
<struct name="Name">
<field name="familyName" type="string" />
<field name="givenNames">
<list type="string" />
</field>
</struct>
<struct name="Person">
<field name="name" typeref="Name" />
<field name="title" type="string" nullable="true" />
<field name="shoeSize" type="int" />
</struct>