2012-04-17 63 views
2

我对货币的目的MVC EnumMember自定义字符串

[DataContract] 
public enum PaymentCurrency 
{ 

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

这套枚举当我想显示的特定项目,例如CAD,我想让它显示为“CA $”字符串。我试图通过给它赋值,它不起作用,我没有太多线索。有任何想法吗 ?谢谢 。

回答

1

value参数的EnumMember属性是有序列化。不显示目的。见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."); 
    } 
}