【问题标题】:Enums, DataContracts and WCF question枚举、DataContracts 和 WCF 问题
【发布时间】:2010-05-13 09:06:16
【问题描述】:
我是 WCF 新手,有一个简单的问题...
我的 DataContract 类从其公开的方法之一向使用者返回 Enum 类型。
消费者能够看到枚举类型,并实例化该类型的变量。
但是,我没有为服务中的枚举提供 [DataContract] 或 [EnumMember]。
我的问题是,为什么客户仍然可以看到它?
我认为我必须将其设为 [DataContract] 才能与业务对象一起序列化,不是吗?
【问题讨论】:
标签:
wcf
enums
datacontractserializer
datacontract
【解决方案1】:
是的 - 你必须 - 直到 .NET 3.5 SP1。
微软“放宽”了规则,现在DataContractSerializer 的行为类似于XmlSerializer,如果您不将任何[DataContract] 和[DataMember] 属性放在任何东西上:它只会简单地序列化所有公共属性和必要的类型。
虽然对于简单场景来说这可能是一种“更简单”的方法,但您也会对命名空间、排序等进行大量控制 - 所以我更愿意仍然显式应用这些属性,只是为了清楚地表达(和记录!)我的意图。但在 .NET 3.5 SP1 中,DataContractSerializer 不再需要和强制执行它。
【解决方案2】:
如果我们不将任何 [DataContract] 和 [DataMember] 属性放在任何东西上,它将自动序列化所有公共属性和必要的类型。此功能受更高版本的 .NET3.5 SP1 支持。