我在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服务。
答案 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}}