/// <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;
                }
            }
        }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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()));
        }