private IEnumerable <NamedValue> ConvertClrValuesToAvoidToConceptualValues(IEnumerable <NamedValue> clrValues) { var result = new List <NamedValue>(); foreach (var value in clrValues) { Type valueType = value.Value != null?value.Value.GetType() : null; if (valueType != null && valueType.IsEnum()) { object underlyingValue = DataUtilities.ConvertFromEnum(value.Value); // add as an underlying value result.Add(new NamedValue(value.Name, underlyingValue)); string enumMemberName = Enum.GetName(valueType, underlyingValue); if (enumMemberName != null) { // add as a string value result.Add(new NamedValue(value.Name, enumMemberName)); } } else { result.Add(value); } } return(result); }
/// <summary> /// Converts a object to a string value and indicates its type and whether it successfully converted it or not /// </summary> /// <param name="value">Value to Convert</param> /// <param name="newStringValue">New Converted Value</param> /// <param name="valueType">Type of the original Value</param> /// <returns>True if it was converted or false if it was not</returns> internal static bool TryConvertPrimitiveValueToString(object value, out string newStringValue, out Type valueType) { valueType = null; newStringValue = null; if (value == null) { return(true); } valueType = value.GetType(); if (valueType == typeof(bool)) { var valueToConvert = (bool)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(byte)) { var valueToConvert = (byte)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(char)) { var valueToConvert = (char)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(DateTime)) { var valueToConvert = (DateTime)value; newStringValue = PlatformHelper.ConvertDateTimeToString(valueToConvert); } else if (valueType == typeof(DateTimeOffset)) { var valueToConvert = (DateTimeOffset)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(decimal)) { var valueToConvert = (decimal)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(double)) { var valueToConvert = (double)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(float)) { var valueToConvert = (float)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(Guid)) { var valueToConvert = (Guid)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(int)) { var valueToConvert = (int)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(long)) { var valueToConvert = (long)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(sbyte)) { var valueToConvert = (sbyte)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(short)) { var valueToConvert = (short)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(string)) { newStringValue = (string)value; } else if (valueType == typeof(TimeSpan)) { var valueToConvert = (TimeSpan)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(uint)) { var valueToConvert = (uint)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(ulong)) { var valueToConvert = (ulong)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType == typeof(ushort)) { var valueToConvert = (ushort)value; newStringValue = XmlConvert.ToString(valueToConvert); } else if (valueType.GetBaseType() == typeof(Enum)) { newStringValue = Enum.GetName(valueType, value); if (newStringValue == null) { Type underlyingValueType; TryConvertPrimitiveValueToString(DataUtilities.ConvertFromEnum(value), out newStringValue, out underlyingValueType); } } else { return(false); } return(true); }