将Enum标志从WCF传递到json客户端

时间:2013-02-11 19:50:21

标签: json wcf

我在C#dll中定义了一个带有[Flags]属性的枚举:

    [Flags]
    [DataContract(Namespace = "MyApp")]
    public enum MobileNotifications
    {
        /// <summary>
        /// 
        /// </summary>
        [EnumMember]
        None,

        /// <summary>
        /// 
        /// </summary>
        [EnumMember]
        Msg1,

        /// <summary>
        /// 
        /// </summary>
        [EnumMember]
        Msg2,

        /// <summary>
        /// 
        /// </summary>
        [EnumMember]
        Msg3,

        /// <summary>
        /// 
        /// </summary>
        [EnumMember]
        Msg4
    }

当我调用方法“GetFlags”时,它会将值作为单个Int值返回。

MobileNotifications GetNotifications()
{
   return Msg1 | Msg4;
}

上述方法返回5作为值。有没有办法让WCF传递一个可以为json解析的枚举标志?

这是一个.NET 4.0 WCF服务。

2 个答案:

答案 0 :(得分:0)

就个人而言,我会再看看这个设计。 5是什么意思?它可以组成几个不同的组合不能吧 - 消息1 | Msg4,Msg 2 | Msg 3等。其余部分也是如此。消费者能否区分这些组合?如果不是,我会建议使其更明确或实际更改枚举值,以便组合是唯一的,如

无= 0, Msg1 = 1, Msg2 = 2, Msg3 = 4, Msg4 = 8

答案 1 :(得分:0)

首先,您需要以2的幂来定义显式枚举常量,以避免不同值组合的任何重叠(请参阅http://msdn.microsoft.com/en-gb/library/vstudio/system.flagsattribute.aspx)。为了以有意义的方式将其返回给Json客户端,我建议ToString()实际创建一个以逗号分隔的实际成员名称列表(然后可以在客户端解析)。[Flags] public enum MobileNotifications { None = 0, Msg1 = 1, Msg2 = 2, Msg3 = 4 } var value = MobileNotifications.Msg1 | MobileNotifications.Msg3; var asString = string.Format("{0}", value); // will create: "Msg1, Msg3" 例如:

{{1}}