我有一个枚举:
public enum DriveConfig
{
[Description("4X2")]
FOURXTWO=0,
[Description("4x4")]
FOURXFOUR=1,
[Description("6x2")]
SIXBYTWO=2,
[Description("6x4")]
SIXBYFOUR=3
}
在我的系统中,我可以通过以下方式获得简单易懂的描述:
public static string GetDescriptionFromEnumValue(Enum value)
{
DescriptionAttribute attribute = value.GetType()
.GetField(value.ToString())
.GetCustomAttributes(typeof(DescriptionAttribute), false)
.SingleOrDefault() as DescriptionAttribute;
return attribute == null ? value.ToString() : attribute.Description;
}
效果非常好。
但现在我需要使用webservices扩展系统,所以我正在制作我的对象的dto,并将它们序列化。直截了当。但是如何在另一端包含描述呢?
我试过这个
[DataContract]
public enum DriveConfigDto
{
[Description("4X2")]
[EnumMember]
FOURXTWO=0,
[Description("4x4")]
[EnumMember]
FOURXFOUR=1,
[Description("6x2")]
[EnumMember]
SIXBYTWO=2,
[Description("6x4")]
[EnumMember]
SIXBYFOUR=3
}
但我无法访问另一端的说明
答案 0 :(得分:1)
这不起作用,因为这些属性不会自动序列化。
答案 1 :(得分:0)
在常见情况下你不能这样做,因为你的网络服务可能有非.NET客户端(因此,它对属性一无所知,因为属性不是合同的一部分)。
但如果您在客户端使用.NET受限,则可以在服务器和客户端之间共享合同。
答案 2 :(得分:0)
如果我理解正确,您可以使用EnumMemberAttribute的Value属性:
[DataContract]
public enum DriveConfigDto
{
[EnumMember(Value="4X2")]
FOURXTWO=0,
[EnumMember]
FOURXFOUR=1,
[EnumMember]
SIXBYTWO=2,
}
生成的XSD将如下所示:
<xs:simpleType name="">
<xs:restriction base="xs:string">
<xs:enumeration value="4X2"/>
<xs:enumeration value="FOURXFOUR"/>
<xs:enumeration value="SIXBYTWO"/>
</xs:restriction>
</xs:simpleType>
答案 3 :(得分:0)
在添加服务引用之前,您必须引用定义了枚举的程序集,并在添加服务引用时将其添加到重用程序集列表中。