/// <summary> /// This method is used for serialization of enum field. /// </summary> /// <param name="writer"> json writer.</param> /// <param name="value"> Type of object being serialized. </param> /// <param name="serializer"> json serializer. </param> public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { FieldInfo[] fields = value.GetType().GetFields(); foreach (var field in fields) { if (String.Compare(field.Name, value.ToString(), StringComparison.Ordinal) == 0) { object[] attr = field.GetCustomAttributes(typeof(System.Xml.Serialization.XmlEnumAttribute), false); if (attr.Length > 0) { System.Xml.Serialization.XmlEnumAttribute xmlAttribute = (System.Xml.Serialization.XmlEnumAttribute)attr[0]; serializer.Serialize(writer, xmlAttribute.Name); return; } serializer.Serialize(writer, field.Name); return; } } }
public static KeyValuePair <string, TEnum>[] GetEnumValues <TEnum>() where TEnum : struct { Type t = typeof(TEnum); var names = Enum.GetNames(t); Func <string, string> valueGetter = (name) => { TEnum enumValue = (TEnum)Enum.Parse(t, name); string ret = ((int)(object)enumValue).ToString(); System.Reflection.FieldInfo fieldInfo = t.GetField(name); System.Xml.Serialization.XmlEnumAttribute attr = fieldInfo.GetCustomAttributes(typeof(System.Xml.Serialization.XmlEnumAttribute), false).SingleOrDefault() as System.Xml.Serialization.XmlEnumAttribute; if (attr != null) { ret = attr.Name; } return(ret); }; return((from name in names select new KeyValuePair <string, TEnum>(valueGetter(name), (TEnum)Enum.Parse(t, name))).ToArray()); }
public static string GetXmlEnumAttributeValue(this Enum enumValue) { string enumStringValue; if (m_EnumValues.TryGetValue(enumValue, out enumStringValue)) { return(enumStringValue); } System.Reflection.FieldInfo fieldInfo = enumValue.GetType().GetField(enumValue.ToString()); System.Xml.Serialization.XmlEnumAttribute xmlEnumAttribute = Attribute.GetCustomAttribute(fieldInfo, typeof(System.Xml.Serialization.XmlEnumAttribute)) as System.Xml.Serialization.XmlEnumAttribute; if (xmlEnumAttribute != null) { enumStringValue = xmlEnumAttribute.Name; m_EnumValues.Add(enumValue, enumStringValue); } else { enumStringValue = enumValue.ToString(); } return(enumStringValue); }
public static string ToXmlEnumString <TEnum>(TEnum value) where TEnum : struct, IConvertible { Type enumType = typeof(TEnum); if (!enumType.IsEnum) { return(null); } System.Reflection.MemberInfo member = enumType.GetMember(value.ToString()).FirstOrDefault(); if (member == null) { return(null); } System.Xml.Serialization.XmlEnumAttribute xmlEnumAttribute = member.GetCustomAttributes(false).OfType <System.Xml.Serialization.XmlEnumAttribute>().FirstOrDefault(); if (xmlEnumAttribute == null) { return(member.Name); } return(xmlEnumAttribute.Name); }
/// <summary> /// This method is used for deserialization of enum field. /// </summary> /// <param name="reader"> json reader object. </param> /// <param name="objectType"> Type of object being serialized. </param> /// <param name="existingValue"> existing value. </param> /// <param name="serializer"> json serializer. </param> /// <returns> returns an object </returns> public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { FieldInfo[] fields = objectType.GetFields(); foreach (var field in fields) { object[] attr = field.GetCustomAttributes(typeof(System.Xml.Serialization.XmlEnumAttribute), false); if (attr.Length > 0) { foreach (var attrItem in attr) { if (attrItem.GetType() == typeof(System.Xml.Serialization.XmlEnumAttribute)) { System.Xml.Serialization.XmlEnumAttribute xmlAttribute = (System.Xml.Serialization.XmlEnumAttribute)attr[0]; if (String.Compare(xmlAttribute.Name, reader.Value.ToString(), StringComparison.Ordinal) == 0) { return(Enum.Parse(objectType, field.Name)); } } } } } return(Enum.Parse(objectType, reader.Value.ToString())); }