重温WCF之数据契约中使用枚举(转载)(十一)

时间:2023-10-04 14:33:13

转载地址:http://www.zhuli8.com/wcf/EnumMember.html

枚举类型的定义总是支持序列化的。当我们定义一个新的枚举时,不必应用DataContract特性,就可以在数据契约中使用它。数据契约隐式地包含了枚举对象的所有值。

  enum ContactType
{
Customer,
Vendor,
Partner
} [DataContract]
struct Contact
{
[DataMember]
public ContactType ContactType;
[DataMember]
public string FirstName;
[DataMember]
public string LastName;
}

如果要将确定的枚举值排除于数据契约之外,首先需要为枚举类型标记DataContract特性。然后,再将那些我们希望包含在枚举数据契约的枚举值,明确地标记为EnumMember特性。

没有标记EnumMember特性的枚举值不属于该枚举的数据契约。

[DataContract]
enum ContactType
{
[EnumMember]
Customer,
[EnumMember]
Vendor,
//不会成为数据契约的一部分
Partner
}
生成的传输型表示形式为:
enum ContactType
{
Customer,
Vendor
}
EnumMember特性还有另外一个用途,就是通过它的Value属性,为现有的枚举数据契约的枚举值设置确切的别名。例如这样的枚举:
[DataContract]
enum ContactType
{
[EnumMember(Value = "MyCustomer")]
Customer,
[EnumMember]
Vendor,
[EnumMember]
Partner
}
生成的传输型表示形式如下:
enum ContactType
{
MyCustomer,
Vendor,
Partner
}