【发布时间】:2009-06-13 17:24:44
【问题描述】:
假设我有一个方法并且返回类型是枚举,我的问题是我应该将枚举声明为 DataContract 吗?
样例中,OrderStatus 是一个枚举数据类型,
OrderStatus Poll(string queryID);
我应该将 OrderStatus 枚举类型声明为 DataContract 吗?
提前致谢, 乔治
【问题讨论】:
标签: c# wcf enums datacontract
假设我有一个方法并且返回类型是枚举,我的问题是我应该将枚举声明为 DataContract 吗?
样例中,OrderStatus 是一个枚举数据类型,
OrderStatus Poll(string queryID);
我应该将 OrderStatus 枚举类型声明为 DataContract 吗?
提前致谢, 乔治
【问题讨论】:
标签: c# wcf enums datacontract
我认为您不需要将 OrderStatus 声明为 DataContract。根据我的经验,如果 Enums 被作为合同一部分的另一个类使用,它们会自动被合同化。
此外,还有一个 [EnumMember] 属性,可让您选择要通过合同公开的枚举值,如果您出于某种原因不想公开所有枚举值。
【讨论】:
您需要将[EnumMember] 等添加到枚举的唯一情况是:
Value)。MSDN 有后者的例子。
【讨论】:
如果您希望使用适当的 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 属性,您可以选择不发布上述所有枚举值。
【讨论】:
我以前不需要回答这个问题,但您似乎可以通过创建一个简单的小测试项目并尝试两种方式自己找到答案。选择可以为您提供所需结果的方法。 (你的帖子并没有真正表明目标,所以无论如何都很难回答这个问题。)
【讨论】:
当您在对 Pwninstein 回答的评论中要求提供文件时,我将其张贴在此处。
http://msdn.microsoft.com/en-us/library/aa347875.aspx
它说(在简单枚举部分):
您还可以序列化尚未应用 DataContractAttribute 属性的枚举类型。此类枚举类型的处理方式与前面描述的完全相同,除了每个成员(未应用 NonSerializedAttribute 属性)都被视为已应用 EnumMemberAttribute 属性。
希望对你有帮助:D
【讨论】: