如何向WCF客户端公开枚举属性
我想向WCF客户端应用程序公开枚举属性,但我只能看到枚举值 以下是枚举:如何向WCF客户端公开枚举属性,wcf,enums,Wcf,Enums,我想向WCF客户端应用程序公开枚举属性,但我只能看到枚举值 以下是枚举: public enum TemplateType { [EnumDescription("Property Particulars")] [EnumValue("PropertyParticulars")] PropertyParticulars = 1, [EnumDescription("Short Format Lists")] [EnumValue("Sho
public enum TemplateType
{
[EnumDescription("Property Particulars")]
[EnumValue("PropertyParticulars")]
PropertyParticulars = 1,
[EnumDescription("Short Format Lists")]
[EnumValue("ShortFormatLists")]
ShortFormatLists,
[EnumDescription("Client Letters")]
[EnumValue("ClientLetters")]
ClientLetters,
[EnumDescription("Labels")]
[EnumValue("Labels")]
Labels
}
如何公开描述和值属性?您可以从服务公开枚举,但当通过线路发送时,枚举上的属性不会序列化。这意味着此枚举的使用者将只看到枚举本身,而不会看到任何属性
你需要做的是用一个
DataContract
属性修饰你的枚举,并用该属性修饰你的值,这样你的信息就会被序列化,但这只允许你指定每个枚举值的基础值,而不是描述。我不完全熟悉这些规范,但我怀疑这种元数据在WSDL中是否具有等效的表示形式。因此,如果在代理中生成类型,则这在客户端将不可见
但是,如果将所有DataContract放在客户端中引用的单独程序集中,则可以在客户端重用这些类型。在这种情况下,属性将是可见的。需要检查服务引用的“引用程序集中的重用类型”,但默认情况下此选项处于启用状态
这是一篇关于它的短文。我肯定还有其他…交通灯值的示例枚举
[DataContract]
public enum TrafficLightType
{
[EnumMember]
Red,
[EnumMember]
Green,
[EnumMember]
Amber
}
有一种解决方法,如果打算为枚举成员公开显示文本,请在合同中以这种方式定义枚举:
public enum EPaymentCycle
{
[EnumMember(Value = "Month by Month")]
Monthly,
[EnumMember(Value = "Week by Week")]
Weekly,
[EnumMember(Value = "Hour by Hour")]
Hours
}
SvcUtils序列化产生了一个有趣的结果:
public enum EPaymentCycle : int
{
[System.Runtime.Serialization.EnumMemberAttribute(Value="Month by Month")]
MonthByMonth= 0,
[System.Runtime.Serialization.EnumMemberAttribute(Value="Week by Week")]
WeekbyWeek= 1,
[System.Runtime.Serialization.EnumMemberAttribute(Value="Hour by Hour")]
HourbyHour = 2
}
您可以通过反射读取EnumMemberAttribute值,这样就得到了它。svcutil序列化生成的xsd元数据文件也与预期的一样:
<xs:simpleType name="EPaymentCycle">
<xs:restriction base="xs:string">
<xs:enumeration value="Month by Month" />
<xs:enumeration value="Week by Week" />
<xs:enumeration value="Hour by Hour" />
</xs:restriction>
感谢您的回复,是否有办法公开属性?+1确切地说,这些属性是.NET特定的-这些属性不会通过WCF消息通道从服务器传输到客户端。由于向后兼容的原因,请勿在WCF响应中公开枚举。请参见EnumMember如何获取描述或值?