从WCF服务公开Enums的DescriptionAttribute

时间:2009-02-12 06:08:25

标签: .net wcf

如何使用WCF在枚举值中从服务到客户端或Web引用中公开description属性    或

如何使用WCF向客户端公开带有描述属性的枚举?虽然暴露描述属性不暴露,但只有枚举值在客户端公开。我希望在enums中描述attribue值。

3 个答案:

答案 0 :(得分:1)

你不能强制这样做 - mex / WDSL描述符只包含与类型相关的一小部分信息。

如果您控制客户端,一个选项是在本地声明枚举(甚至所有类型),并从那里开始使用。您应该能够使用svcutil / reference:开关来使用现有程序集中的类型(IDE提供相同的类型)。但请注意,这部分违反了SOA规则(即您使用的信息多于服务合同所承诺的信息)。

答案 1 :(得分:0)

你可以用反射做到这一点。在获得Enum值后返回客户端。尝试使用GetField()&获取属性。 GetCustomAttributes()

using System;
using System.Reflection;
using System.ComponentModel;

namespace CustomAttributes
{
    class Program
    {
        static void Main(string[] args)
        {
            Colors n1 = Colors.blue;

            object [] attribues = n1.GetType().GetField(n1.ToString()).GetCustomAttributes(true);
            Console.WriteLine((attribues[0] as DescriptionAttribute).Description);
            // WOULD PRINT  "DARK BLUE"
        }
    }

    enum Colors
    {
        [Description("DARK BLUE")]
        blue,
        [Description("PLAIN WHITE")]
        white
    }
}

答案 2 :(得分:0)

查看XmlEnum Attribute。这将允许您指定xml属性的“名称”。例如:

public enum MyEnum
{
    [XmlEnum("Coolbox")]
    Esky,
    [XmlEnum("Sandles")]
    Thong,
    [XmlEnum("MoreLikeGridironThanRealFootball")]
    Footy,
}
相关问题