0

[Flags]次の属性を持つ C# dll で定義された Enum があります。

    [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

最初に、明示的な列挙定数を 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 に答える
0

個人的には、このデザインをもう一度見てみたいと思います。5 とはどういう意味ですか? いくつかの異なる組み合わせで構成できますね - メッセージ 1 | メッセージ 4、メッセージ 2| メッセージ 3 など。残りも同様です。消費者は組み合わせを区別できますか? そうでない場合は、これをより明示的にするか、実際に列挙値を変更して、組み合わせが一意になるようにすることをお勧めします。

なし =0、メッセージ 1 = 1、メッセージ 2 = 2、メッセージ 3 = 4、メッセージ 4 = 8

于 2013-02-11T23:05:53.467 に答える