The generation of methods to encode data in XML is similar to how methods were generated in the BER/DER and PER cases discussed previously. For each ASN.1 production defined in the ASN.1 source file, a C# encode method may be generated. This function will convert a populated variable of the given type into an encoded ASN.1 message.
An encode method is only generated if it is required to alter the encoding of the base class method. The C# model is built on inheritance from a set of common run-time base classes. These run-time classes contain default implementations of encode/decode methods that handle the encoding/decoding of the basic types.
For simple assignments, the generation of an encode method is not necessary. For example, the following production will not result in the generation of an encode method:
X ::= INTEGER
In this case, the generated C# class extends the Asn1Integer base class and the default encode method within this class is sufficient to encode a value of the generated type.
A custom encode method is only generated if:
The ASN.1 type is constructed (SEQUENCE, SET, SEQUENCE OF, SET OF, or CHOICE).
The ASN.1 type contains a testable constraint (for example, INTEGER (1..100))
The ASN.1 type is enumerated. This includes an INTEGER type with named numbers, a BIT STRING with named bit constants, or the ENUMERATED built-in type.
Two variations are discussed here: "XER" and "XML". The "XML" variant applies to EXTENDED-XER. See the Overview section above for more information.