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>