Enumerations
Enumerations are always, by definition, serializable. When
you define a new enum, there is no need to apply the DataContract attribute
to it, and you can use it freely in a data contract, as shown in Example 3-15. All the values in the
enum will implicitly be included in the data contract.
Example 3-15. Using an enum in a data contract
enum ContactType
{
Customer,
Vendor,
Partner
}
[DataContract]
struct Contact
{
[DataMember]
public ContactType ContactType;
[DataMember]
public string FirstName;
[DataMember]
public string LastName;
}If you want to exclude certain enum values from the data contract,
you need to first decorate the enum with the DataContract attribute, and then explicitly
apply the EnumMemberAttribute to
all enum values you want to include in the enum data contract. The
EnumMember attribute is defined
as:
[AttributeUsage(AttributeTargets.Field,Inherited = false)]
public sealed class EnumMemberAttribute : Attribute
{
public string Value
{get;set;}
}Any enum value not decorated with the EnumMember attribute will not be part of the
data contract for that enum. For example, this enum:
[DataContract]
enum ContactType
{
[EnumMember]
Customer,
[EnumMember]
Vendor,
//Will not be part of data contract
Partner
}will result in this wire representation:
enum ContactType
{
Customer,
Vendor
}The other use for the EnumMember attribute is
to alias certain enum values to an existing enum data contract using the
Value property. For
example, this enum:
[DataContract] enum ContactType ...