Enumerations are always serializable by definition. When you define a new enum, there is no need to apply the DataContract
attribute on it, and you can freely use it in a data contract, as shown in Example 3-9. All the values in the enum will implicitly be included in the data contract.
Example 3-9. 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. 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 already existing enum data contract using the Value
property. For example, this enum:
[DataContract]
enum ContactType
{
[EnumMember(Value = "MyCustomer"
)]
Customer,
[EnumMember]
Vendor,
[EnumMember]
Partner
}
will result with this wire representation:
enum ContactType { MyCustomer, Vendor, Partner }
The affect the EnumMember
attribute has is local to the party using it. When publishing the metadata (or when defining it on the client side) the resulting data contract has no trace of it, and only the final product is used.
3.142.132.137