我想将枚举属性公开给WCF客户端应用程序,但我只能看到枚举值。
这是枚举:
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
}
如何公开Description和Value属性?
答案 0 :(得分:8)
您可以从服务公开枚举,但枚举时的属性在通过网络发送时不会被序列化。这意味着此枚举的使用者只会看到枚举本身,而不会看到任何属性。
您需要做的是使用DataContract
属性打造枚举,并使用EnumMember
属性打造值,以便将序列化您的信息,但这只允许您指定< em>每个枚举值的基础值,而不是描述。
答案 1 :(得分:3)
如果打算为枚举成员公开显示文本,在合同中以这种方式定义枚举,则有一种解决方法:
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>
答案 2 :(得分:2)
我并不完全熟悉规范,但我怀疑这种元数据在WSDL中具有等效表示。因此,如果您在代理中生成类型,则在客户端不会显示此内容。
但是,如果将所有DataContracts放在客户端中引用的单独程序集中,则可以在客户端重用这些类型。在这种情况下,属性将是可见的。需要检查“引用程序集中的重用类型”以查找“服务引用”,但默认情况下会启用此选项。
Here是一篇关于它的简短博文。我确定还有其他人......
答案 3 :(得分:1)
红绿灯值的示例枚举...
[DataContract]
public enum TrafficLightType
{
[EnumMember]
Red,
[EnumMember]
Green,
[EnumMember]
Amber
}