2012-04-17 5 views
2

私は、特定のアイテムを表示したいとき、私は通貨の目的のためにMVC EnumMemberのカスタム文字列

[DataContract] 
public enum PaymentCurrency 
{ 

    /// <summary> 
    /// Canadian dollar. 
    /// </summary> 
    [EnumMember(Value = "CA$")] 
    CAD = 1, 
} 

を列挙型のセットを持っていた、例えばCADのために、私はそれが「CA $」の文字列として表示します。私はそれに価値を割り当てることによってそれを試しました、それは動作していないと私は多くの手がかりを持っていない。何か案は ?ありがとう。

答えて

1

EnumMember属性のvalue引数がシリアル化用にあります。目的を表示しない。 MSDN Documentationを参照してください。

この値を取得するには、シリアル化してXMLを解析する必要があります。

もう一つの方法は、あなた自身のヘルパーメソッドを作成し、C#、内蔵DescriptionAttributeの利点を取ることです。

public enum PaymentCurrency 
{ 
    [DescriptionAttribute("CA$")] 
    CAD, 
    [DescriptionAttribute("US$")] 
    USD, 
    EURO 
} 

次に、あなたがこれを行うことができますEnumUtilsクラスで独自のヘルパーメソッド使用:

public class EnumUtils 
{ 
    public static string stringValueOf(Enum value) 
    { 
    var fi = value.GetType().GetField(value.ToString()); 
    var attributes = (DescriptionAttribute[]) fi.GetCustomAttributes(typeof(DescriptionAttribute), false); 
    if (attributes.Length > 0) 
    { 
     return attributes[0].Description; 
    } 
    else 
    { 
     return value.ToString(); 
    } 
    } 

    public static object enumValueOf(string value, Type enumType) 
    { 
    string[] names = Enum.GetNames(enumType); 
    foreach (string name in names) 
    { 
     if (stringValueOf((Enum)Enum.Parse(enumType, name)).Equals(value)) 
     { 
      return Enum.Parse(enumType, name); 
     } 
    } 

    throw new ArgumentException("The string is not a description or value of the specified enum."); 
    } 
} 
関連する問題