Esempio n. 1
0
        /// <summary>Materializes an enum value. No op or non-primitive values.</summary>
        /// <param name="enumType">The clr Type of value to set.</param>
        /// <param name="enumValue">The value of enum.</param>
        /// <returns>The materialized value.</returns>
        internal static object MaterializeODataEnumValue(Type enumType, ODataEnumValue enumValue)
        {
            object tmpValue;

            if (enumValue == null)
            {
                tmpValue = null;
            }
            else
            {
                // TODO: Find better way to parse Enum
                string enumValueStr   = enumValue.Value.Trim();
                Type   underlyingType = Nullable.GetUnderlyingType(enumType) ?? enumType;
                if (!Enum.IsDefined(underlyingType, enumValueStr))
                {
                    tmpValue = Enum.Parse(underlyingType, ClientTypeUtil.GetClientFieldName(underlyingType, enumValueStr), false);
                }
                else
                {
                    tmpValue = Enum.Parse(underlyingType, enumValueStr, false);
                }
            }

            return(tmpValue);
        }
Esempio n. 2
0
        /// <summary>Materializes an enum value. No op or non-primitive values.</summary>
        /// <param name="type">The clr Type of value to set.</param>
        /// <param name="wireTypeName">The Type name from the payload.</param>
        /// <param name="enumValueStr">The string of enum value.</param>
        /// <param name="throwOnNullMessage">The exception message if the value is null.</param>
        /// <param name="materializedValue">The materialized value.</param>
        private void MaterializeODataEnumValue(Type type, string wireTypeName, string enumValueStr, Func <string> throwOnNullMessage, out object materializedValue)
        {
            Debug.Assert(type != null, "type != null");
            Type underlyingType = Nullable.GetUnderlyingType(type) ?? type;
            ClientTypeAnnotation elementTypeAnnotation = this.context.ResolveTypeForMaterialization(underlyingType, wireTypeName);

            Debug.Assert(elementTypeAnnotation != null, "elementTypeAnnotation != null");

            // TODO: Find better way to parse Enum
            Type enumClrType = elementTypeAnnotation.ElementType;

            enumValueStr = enumValueStr.Trim();
            if (!Enum.IsDefined(enumClrType, enumValueStr))
            {
                materializedValue = Enum.Parse(enumClrType, ClientTypeUtil.GetClientFieldName(enumClrType, enumValueStr), false);
            }
            else
            {
                materializedValue = Enum.Parse(enumClrType, enumValueStr, false);
            }
        }