/// <summary> /// Return xml string for this value /// </summary> /// <typeparam name="T">Enum type</typeparam> internal static String GetXmlNameFromEnum <T>(T value) { if (value == null) { throw new ArgumentNullException("value"); } FieldInfo fi = typeof(T).GetField(value.ToString()); if (fi.GetCustomAttributes(typeof(XmlNameAttribute), false).Count() == 0) { throw new Exception(String.Format("Attribute 'XmlNameAttribute' is not assigned to {0} fields!", typeof(T).Name)); } XmlNameAttribute a = (XmlNameAttribute)fi.GetCustomAttributes(typeof(XmlNameAttribute), false).First(); return(a.XmlName); }
/// <summary> /// Get value from XElement and convert it to enum /// </summary> /// <typeparam name="T">Enum type</typeparam> internal static T GetValueToEnum <T>(XElement element) { if (element == null) { throw new ArgumentNullException("element"); } String value = element.Attribute(XName.Get("val")).Value; foreach (T e in Enum.GetValues(typeof(T))) { FieldInfo fi = typeof(T).GetField(e.ToString()); if (fi.GetCustomAttributes(typeof(XmlNameAttribute), false).Count() == 0) { throw new Exception(String.Format("Attribute 'XmlNameAttribute' is not assigned to {0} fields!", typeof(T).Name)); } XmlNameAttribute a = (XmlNameAttribute)fi.GetCustomAttributes(typeof(XmlNameAttribute), false).First(); if (a.XmlName == value) { return(e); } } throw new ArgumentException("Invalid element value!"); }