WCF中的DataContract问题

时间:2009-06-13 17:24:45

标签: c# wcf enums datacontract

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

样本中的样本,OrderStatus是枚举数据类型,

OrderStatus Poll(string queryID);

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

提前谢谢, 乔治

5 个答案:

答案 0 :(得分:4)

我认为您不需要将OrderStatus声明为DataContract。根据我的经验,如果Enums被另一个属于合同的类使用,它们将自动签订合同。

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

答案 1 :(得分:4)

您需要在枚举中添加[EnumMember]等的唯一时间是:

  • 你不希望它们全部曝光(见Pwninstein的答案)
  • 出于兼容性原因,您想更改电线上的文字(设置Value)。

MSDN有一个后者的例子。

答案 2 :(得分:3)

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

e.g。

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

当你在Pwninstein的评论中要求提供一份文件的时候,我就把它放在这里。

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

它说(在Simple Enumerations部分中):

  

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

希望它有所帮助:D