2

假设我有一个方法并且返回类型是枚举,我的问题是我应该将枚举声明为 DataContract 吗?

样例中,OrderStatus 是一个枚举数据类型,

OrderStatus Poll(string queryID);

我应该将 OrderStatus 枚举类型声明为 DataContract 吗?

提前谢谢,乔治

4

5 回答 5

4

我认为您不需要将 OrderStatus 声明为 DataContract。根据我的经验,如果 Enums 被作为合同一部分的另一个类使用,它们会自动被合同化。

[EnumMember]此外,如果您出于某种原因不想公开所有枚举值,还有一个属性可以让您选择要通过合同公开的枚举值。

于 2009-06-13T17:39:42.177 回答
4

唯一需要将[EnumMember] 等添加到枚举的情况是:

  • 您不希望它们全部暴露(请参阅 Pwninstein 的回答)
  • 出于兼容性原因,您想更改线路上的文本(设置Value)。

MSDN 有后者的例子。

于 2009-06-14T07:18:32.893 回答
3

如果您希望使用适当的 xsd 命名空间发布您的 wsdl,您只能使用枚举的 DataContract 属性来执行此操作。

例如

[Datacontract(Namespace="http://company/xsd/service/2009/07/03"]
public enum Status
{
[EnumMember]
ERROR = 1,
[EnumMember]
GOOD = 2,
}

否则,在 wsdl 中使用默认命名空间。对于企业 Web 服务,您可能希望有适当的名称空间和版本控制您的 wsdl 模式。同样使用 EnumMember 属性,您可以选择不发布上述所有枚举值。

于 2009-07-02T12:23:23.410 回答
1

当您在对 Pwninstein 回答的评论中要求提供文件时,我将其张贴在这里。

http://msdn.microsoft.com/en-us/library/aa347875.aspx

它说(在简单枚举部分):

您还可以序列化尚未应用 DataContractAttribute 属性的枚举类型。此类枚举类型的处理方式与前面描述的完全相同,除了每个成员(未应用 NonSerializedAttribute 属性)都被视为已应用 EnumMemberAttribute 属性。

希望它有所帮助:D

于 2011-02-26T19:21:44.800 回答
1

我以前不需要回答这个问题,但您似乎可以通过创建一个简单的小测试项目并尝试两种方式自己找到答案。选择能够为您提供所需结果的方法。(你的帖子并没有真正表明目标,所以无论如何都很难回答这个问题。)

于 2009-06-13T17:36:44.803 回答