6
[DataContract]
public enum Color
{
    Red,
    Blue
}

[DataContract]
public enum Color1
{
    [EnumMember]
    Red,
    [EnumMember]
    Blue
}

这两个枚举在序列化时或在客户端会被区别对待吗?

4

3 回答 3

9

当您将 应用于DataContractAttribute枚举时,您必须通过使用EnumMemberAttribute.

因此,在您的情况下,两个枚举将产生两个不同的合同,一个没有成员,一个有两个成员,Red并且Blue.

如果您不将 应用于DataContractAttribute枚举,则该枚举的所有成员都将隐含在合同中。

有关解释,请参见此处Enumeration Member Values,主要是和 Notes on Simple Enumerations部分。

于 2013-03-01T09:55:23.397 回答
5

如果您不使用 EnumMember 属性标记枚举值,它将不是数据协定的一部分。这意味着它不会出现在 wsds/contract/proxies 中,并且客户端将无法使用它。

于 2013-03-01T09:55:51.597 回答
0

它不一定会在客户端被识别为已知类型的成员,这是Color因为您没有明确表示它是合同的一部分,因此在生成代理时没有理由尊重它。

于 2013-03-01T09:53:31.743 回答