0

我在具有以下属性的 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 服务。

4

2 回答 2

0

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

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

于 2013-02-11T23:05:53.467 回答
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"
于 2013-02-12T11:01:56.437 回答