[DataContract]
public enum Color
{
Red,
Blue
}
[DataContract]
public enum Color1
{
[EnumMember]
Red,
[EnumMember]
Blue
}
这两个枚举在序列化时还是在客户端时会有所不同?WCF枚举,如果我不将成员标记为EnumMember,该怎么办?
[DataContract]
public enum Color
{
Red,
Blue
}
[DataContract]
public enum Color1
{
[EnumMember]
Red,
[EnumMember]
Blue
}
这两个枚举在序列化时还是在客户端时会有所不同?WCF枚举,如果我不将成员标记为EnumMember,该怎么办?
如果您没有使用EnumMember属性标记枚举值,它将不会成为数据合同 的一部分。这意味着它不会出现在wsds/contract/proxies中,并且客户端将无法使用它。
它不一定会在客户端上公认的已知类型是Color
中的一员,因为你没有明确说这是合同的一部分,因此没有理由产生时尊重代理。
正如你已经应用了DataContractAttribute
的枚举,必须明确说明这是枚举的成员应包括,通过使用EnumMemberAttribute
的。
因此,在您的情况下,两个枚举将生成两个不同的合同,一个没有成员,一个有两个成员,Red
和Blue
。
如果您不将DataContractAttribute
应用于某个枚举,则该枚举的所有成员都将隐含在合同中。
一个解释参见here,主要是Enumeration Member Values
和 Notes on Simple Enumerations
部分。
没有写在http://msdn.microsoft.com/en-us/library/aa347875(v=vs.110).aspx聊天下的“简单枚举”它说如果你什么也没有写,那么它的可序列化为如果你将标志设置为全部。 – 2014-11-25 05:08:35
也就是说:只有在*类型用DataContractAttribute标记时,Opt-in才适用*。 – user2864740 2015-03-04 19:23:53