示例#1
0
        public static bool TryTo <T>(
            this object value,
            out T result,
            string format = "")
        {
            result = default(T);
            if (null == value)
            {
                return(false);
            }

            var str = value.ToString();

            if (IsJson(str))
            {
                var t = typeof(T);
                if (
                    !t.IsPrimitive
                    &&
                    !t.Is <string>()
                    &&
                    !t.Is <byte[]>())
                {
                    try {
                        result = JsonConvert
                                 .DeserializeObject <T>(str);
                        return(true);
                    } catch (Exception ex) {
                        LogRecord
                        .Create("Json deserialization error")
                        //.Add("Json", str)
                        //.Add("ConvertToType", t.Name)
                        //.Add(ex)
                        .Error();
                    }
                }
            }

            if (value.Is <T>())
            {
                try {
                    result = (T)value;
                    return(true);
                } catch { }
            }

            object val;

            if (TryTo(value, typeof(T), out val, format))
            {
                try {
                    result = (T)val;
                    return(true);
                } catch { }
            }

            return(false);
        }
示例#2
0
        public static string Join(
            this object[] cols,
            Func <object, string> transfer,
            string separator,
            string quoter0,
            string quoter9)
        {
            if (cols.NullOrEmpty())
            {
                return(string.Empty);
            }
            if (separator.NullOrEmpty())
            {
                separator = string.Empty;
            }
            if (quoter0.NullOrEmpty())
            {
                quoter0 = string.Empty;
            }
            if (quoter9.NullOrEmpty())
            {
                quoter9 = string.Empty;
            }

            var sb = new StringBuilder();

            foreach (var x in cols)
            {
                var val = string.Empty;
                if (null == transfer)
                {
                    val = x.ToStringX();
                }
                else
                {
                    try {
                        val = transfer(x);
                    } catch (Exception ex) {
                        LogRecord
                        .Create("Extender")
                        .Error();
                    }
                }
                sb.Append(quoter0);
                sb.Append(val);
                sb.Append(quoter9);
                sb.Append(separator);
            }

            return(sb.ToString().TrimEnd(separator));
        }
示例#3
0
        public static List <Type> GatherByInterface(
            this Assembly assembly,
            Type type)
        {
            if (null == assembly)
            {
                return(new List <Type>());
            }

            var types = new Type[0];

            try {
                types = Reflector.GetTypes(assembly);
            } catch (Exception ex) {
                var record = LogRecord.Create("GatherByInterface");
                //record.Add("AssemblyFullName", assembly.FullName);
                var e = ex as ReflectionTypeLoadException;
                if (null != e)
                {
                    foreach (var x in e.LoaderExceptions)
                    {
                        //record.Add("LoadExceptions", x.Message);
                    }
                }
                //record.Add(ex).Error();
            }

            if (null == types || types.Length == 0)
            {
                return(new List <Type>());
            }

            var interfaceName = type.Name;
            var list          = new List <Type>();

            foreach (var x in types)
            {
                if (!x.IsClass || x.IsAbstract)
                {
                    continue;
                }
                if (!x.IsDerived(type))
                {
                    continue;
                }
                list.Add(x);
            }
            return(list);
        }
示例#4
0
        public static string GetFriendlyName(this Type type)
        {
            try {
                if (null == type)
                {
                    return(string.Empty);
                }
                if (type.IsGenericParameter)
                {
                    return(type.Name);
                }
                if (!type.IsGenericType)
                {
                    return(type.FullName);
                }

                var sb    = new StringBuilder();
                var name  = type.Name;
                var index = name.IndexOf(Symbol.BackQuoter);
                sb.AppendFormat(
                    "{0}.{1}",
                    type.Namespace,
                    name.Substring(0, index)
                    );
                sb.Append(Symbol.LessThan);
                var first = true;
                foreach (var arg in type.GetGenericArguments())
                {
                    if (!first)
                    {
                        sb.Append(Symbol.CommaSpace);
                    }
                    sb.Append(arg.GetFriendlyName());
                    first = false;
                }
                sb.Append(Symbol.GreaterThan);
                return(sb.ToString());
            } catch (Exception ex) {
                LogRecord
                .Create("Extender")
                .SetMessage("Type.GetFriendlyName()")
                //.Add(ex)
                .Error();
                return(string.Empty);
            }
        }
示例#5
0
 public static Type[] GetTypes(Assembly assembly)
 {
     try {
         var types = assembly.GetTypes();
         return(types);
     } catch (ReflectionTypeLoadException lex) {
         LogRecord
         .Create()
         //.Add("Assembly", assembly.FullName)
         //.Add(lex)
         //.Add(lex.LoaderExceptions)
         .Error();
     } catch (Exception ex) {
         LogRecord
         .Create()
         //.Add("Assembly", assembly.FullName)
         //.Add(ex)
         //.Add(ex.InnerException)
         .Error();
     }
     return(new Type[0]);
 }
示例#6
0
        public static IDictionary <string, T> CollectImplementedObject <T>(
            Assembly asm)
            where T : class
        {
            Checker.NotNullArgument(asm, "asm").Throw();

            var list = new Dictionary <string, T>();

            try {
                var types = asm.GatherByInterface <T>();
                if (types.Any())
                {
                    foreach (var type in types)
                    {
                        if (type.IsAbstract)
                        {
                            continue;
                        }
                        var one = Activator.CreateInstance(type);
                        T   t   = one as T;
                        if (null == t)
                        {
                            continue;
                        }
                        list.Add(type.FullName, t);
                    }
                }
            } catch (Exception ex) {
                LogRecord
                .Create()
                //.Add("Assembly", asm.FullName)
                //.Add("ObjectType", typeof(T).Name)
                //.Add(ex)
                .Error();
            }
            return(list);
        }
示例#7
0
        public static string Path(this MethodBase method)
        {
            if (null == method)
            {
                LogRecord
                .Create("Extender")
                .SetMessage("MethodBase.Path(), MethodBase is null.")
                .Error();
                return(string.Empty);
            }

            var type       = method.ReflectedType;
            var methodName = method.Name;

            if (null == type)
            {
                return(methodName);
            }

            var friendlyName = type.GetFriendlyName();
            var path         = string.Format("{0}.{1}", friendlyName, methodName);

            return(path);
        }
示例#8
0
        private static bool TryFromInt64(
            long value,
            XInfo from,
            XInfo to,
            out object result,
            string format)
        {
            result = GetDefaultValue(to.Category);

            switch (to.Category)
            {
            case TypeCategory.Array:
                if (to.IsBytes)
                {
                    result = BitConverter.GetBytes(value);
                    return(true);
                }
                return(TryToArray(
                           from,
                           to,
                           value,
                           out result,
                           format
                           ));

            case TypeCategory.Int64:
                result = value;
                return(true);

            case TypeCategory.Stream:
                var bytes = BitConverter.GetBytes(value);
                result = new MemoryStream(bytes);
                return(true);

            case TypeCategory.Enum:
            case TypeCategory.String:
                var s = value.ToString();
                return(TryFromString(
                           s,
                           XInfo.String.Value,
                           to,
                           out result,
                           format
                           ));

            case TypeCategory.Char:
                result = Convert.ToChar(value);
                return(true);

            case TypeCategory.Boolean:
                result = value > 0;
                return(true);

            case TypeCategory.Color:
                var i = (Int32)value;
                if (!NumericCompare(value, result))
                {
                    return(false);
                }
                return(TryFromInt32(
                           i,
                           XInfo.Int32.Value,
                           to,
                           out result,
                           format
                           ));

            case TypeCategory.DateTime:
                try {
                    result = DateTime.FromBinary(value);
                    return(true);
                } catch (Exception ex) {
                    LogRecord
                    .Create()
                    //.Add("value", value)
                    //.Add(ex)
                    .Error();
                    return(false);
                }

            case TypeCategory.Decimal:
                result = (Decimal)value;
                return(NumericCompare(value, result));

            case TypeCategory.Byte:
                checked { result = (Byte)value; }
                return(NumericCompare(value, result));

            case TypeCategory.SByte:
                checked { result = (SByte)value; }
                return(NumericCompare(value, result));

            case TypeCategory.Int16:
                checked { result = (Int16)value; }
                return(NumericCompare(value, result));

            case TypeCategory.UInt16:
                checked { result = (UInt16)value; }
                return(NumericCompare(value, result));

            case TypeCategory.Int32:
                checked { result = (Int32)value; }
                return(NumericCompare(value, result));

            case TypeCategory.UInt32:
                checked { result = (UInt32)value; }
                return(NumericCompare(value, result));

            case TypeCategory.UInt64:
                checked { result = (UInt64)value; }
                return(NumericCompare(value, result));

            case TypeCategory.Single:
                result = (Single)value;
                return(NumericCompare(value, result));

            case TypeCategory.Double:
                result = (Double)value;
                return(NumericCompare(value, result));

            case TypeCategory.Interface:
            case TypeCategory.Class:
            case TypeCategory.Struct:
            case TypeCategory.IntPtr:
            case TypeCategory.UIntPtr:
            case TypeCategory.Null:
            case TypeCategory.Others:
            default:
                return(false);
            }
        }
示例#9
0
        private static bool TryFromString(
            string value,
            XInfo from,
            XInfo to,
            out object result,
            string format)
        {
            result = GetDefaultValue(to.Category);

            decimal decimalVal;
            var     decimalFlag = decimal.TryParse(value, out decimalVal);

            switch (to.Category)
            {
            case TypeCategory.Array:
                if (to.IsBytes)
                {
                    result = IsToConfig.Encoding.GetBytes(value);
                    return(true);
                }
                var firstElement = to
                                   .ElementInfos
                                   .FirstOrDefault();
                if (
                    null != firstElement
                    &&
                    firstElement.Category
                    ==
                    TypeCategory.Class)
                {
                    if (!IsJson(value))
                    {
                        return(false);
                    }
                    result = JsonConvert.DeserializeObject(
                        value,
                        to.Type
                        );
                    return(true);
                }
                return(TryToArray(
                           from,
                           to,
                           value,
                           out result,
                           format
                           ));

            case TypeCategory.String:
                result = value;
                return(true);

            case TypeCategory.Stream:
                result = new MemoryStream(value.To <byte[]>());
                return(true);

            case TypeCategory.Enum:
                result = IsToConverter.FromString.ToEnum(
                    to.Type,
                    value
                    );
                return(true);

            case TypeCategory.Class:
            case TypeCategory.Struct:
                if (IsJson(value))
                {
                    result = JsonConvert.DeserializeObject(
                        value,
                        to.Type
                        );
                    return(true);
                }
                return(false);

            case TypeCategory.DateTime:
                DateTime val;
                if (DateTime.TryParse(value, out val))
                {
                    result = val;
                    return(true);
                }
                else
                {
                    int[] points;
                    if (TryParseDate(value, out points))
                    {
                        try {
                            var millisecond = points[6]
                                              .To <string>()
                                              .Left(3)
                                              .To <int>();
                            result = new DateTime(
                                ToExtender.Enclosed(points[0], 1, 9999),
                                ToExtender.Enclosed(points[1], 1, 12),
                                ToExtender.Enclosed(points[2], 1, 31),
                                ToExtender.Enclosed(points[3], 0, 23),
                                ToExtender.Enclosed(points[4], 0, 59),
                                ToExtender.Enclosed(points[5], 0, 59),
                                millisecond
                                );
                        } catch (Exception ex) {
                            LogRecord
                            .Create()
                            //.Add("Value", value)
                            //.Add("From", from.FullName)
                            //.Add("To", to.FullName)
                            //.Add(
                            //	"Points",
                            //	points
                            //		.Select(x => x.ToString())
                            //		.Join(Symbol.CommaSpace)
                            //)
                            //.Add(ex)
                            .Error();
                            return(false);
                        }
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }

            case TypeCategory.Boolean:
                if (IsNumeric(value))
                {
                    var i = value.To <int>();
                    result = i > 0;
                    return(true);
                }

                foreach (var one in IsToConfig.TrueStringArray)
                {
                    if (one.Equals(
                            value,
                            StringComparison.OrdinalIgnoreCase))
                    {
                        result = true;
                        break;
                    }
                }
                return(true);

            case TypeCategory.Char:
                result = Convert.ToChar(value);
                return(true);

            case TypeCategory.Decimal:
                result = decimalVal;
                return(decimalFlag);

            case TypeCategory.Byte:
                if (!decimalFlag)
                {
                    return(false);
                }
                byte byteVal;
                if (decimalVal.TryTo <byte>(out byteVal))
                {
                    result = byteVal;
                    return(true);
                }
                else
                {
                    return(false);
                }

            case TypeCategory.SByte:
                if (!decimalFlag)
                {
                    return(false);
                }
                sbyte sbyteVal;
                if (decimalVal.TryTo <sbyte>(out sbyteVal))
                {
                    result = sbyteVal;
                    return(true);
                }
                else
                {
                    return(false);
                }

            case TypeCategory.Int16:
                if (!decimalFlag)
                {
                    return(false);
                }
                Int16 int16Val;
                if (decimalVal.TryTo <Int16>(out int16Val))
                {
                    result = int16Val;
                    return(true);
                }
                else
                {
                    return(false);
                }

            case TypeCategory.UInt16:
                if (!decimalFlag)
                {
                    return(false);
                }
                UInt16 uint16Val;
                if (decimalVal.TryTo <UInt16>(out uint16Val))
                {
                    result = uint16Val;
                    return(true);
                }
                else
                {
                    return(false);
                }

            case TypeCategory.Int32:
                if (!decimalFlag)
                {
                    return(false);
                }
                Int32 int32Val;
                if (decimalVal.TryTo <Int32>(out int32Val))
                {
                    result = int32Val;
                    return(true);
                }
                else
                {
                    return(false);
                }

            case TypeCategory.UInt32:
                if (!decimalFlag)
                {
                    return(false);
                }
                UInt32 uint32Val;
                if (decimalVal.TryTo <UInt32>(out uint32Val))
                {
                    result = uint32Val;
                    return(true);
                }
                else
                {
                    return(false);
                }

            case TypeCategory.Int64:
                if (!decimalFlag)
                {
                    return(false);
                }
                Int64 int64Val;
                if (decimalVal.TryTo <Int64>(out int64Val))
                {
                    result = int64Val;
                    return(true);
                }
                else
                {
                    return(false);
                }

            case TypeCategory.UInt64:
                if (!decimalFlag)
                {
                    return(false);
                }
                UInt64 uint64Val;
                if (decimalVal.TryTo <UInt64>(out uint64Val))
                {
                    result = uint64Val;
                    return(true);
                }
                else
                {
                    return(false);
                }

            case TypeCategory.Single:
                if (!decimalFlag)
                {
                    return(false);
                }
                Single singleVal;
                if (decimalVal.TryTo <Single>(out singleVal))
                {
                    result = singleVal;
                    return(true);
                }
                else
                {
                    return(false);
                }

            case TypeCategory.Double:
                if (!decimalFlag)
                {
                    return(false);
                }
                Double doubleVal;
                if (decimalVal.TryTo <Double>(out doubleVal))
                {
                    result = doubleVal;
                    return(true);
                }
                else
                {
                    return(false);
                }

            case TypeCategory.Interface:
            case TypeCategory.IntPtr:
            case TypeCategory.UIntPtr:
            case TypeCategory.Null:
            case TypeCategory.Others:
            default:
                return(false);
            }
        }
示例#10
0
        private static bool TryFromClass(
            object value,
            XInfo from,
            XInfo to,
            out object result,
            string format)
        {
            result = GetDefaultValue(to.Category);

            switch (to.Category)
            {
            case TypeCategory.Array:
                return(TryToArray(
                           from,
                           to,
                           value,
                           out result,
                           format
                           ));

            case TypeCategory.Class:
                if (from.Equals(to))
                {
                    result = value;
                    return(true);
                }

                var underlyingType = Nullable.GetUnderlyingType(
                    to.Type
                    );
                var converter = underlyingType == null
                                                ? TypeDescriptor.GetConverter(to.Type)
                                                : TypeDescriptor.GetConverter(underlyingType);

                if (null != converter)
                {
                    try {
                        result = converter.ConvertFrom(value);
                        return(true);
                    } catch (Exception ex) {
                        LogRecord
                        .Create()
                        //.Add("Typeconverter", converter.GetType().Name)
                        //.Add("From", from?.Type.Name)
                        //.Add("To", to?.Type.Name)
                        //.Add("ValueType", value?.GetType().Name)
                        //.Add("Value", value)
                        //.Add(ex)
                        .Error();
                    }
                }
                result = ForceClone(value, to.Type);
                return(true);

            case TypeCategory.Struct:
                var dic = GetValues(value);
                result = SetValues(dic, to.Type);
                return(true);

            case TypeCategory.Enum:
            case TypeCategory.Interface:
            case TypeCategory.Stream:
            case TypeCategory.Color:
            case TypeCategory.String:
            case TypeCategory.DateTime:
            case TypeCategory.Decimal:
            case TypeCategory.Boolean:
            case TypeCategory.Char:
            case TypeCategory.Byte:
            case TypeCategory.SByte:
            case TypeCategory.Int16:
            case TypeCategory.UInt16:
            case TypeCategory.Int32:
            case TypeCategory.UInt32:
            case TypeCategory.IntPtr:
            case TypeCategory.UIntPtr:
            case TypeCategory.Int64:
            case TypeCategory.UInt64:
            case TypeCategory.Single:
            case TypeCategory.Double:
            case TypeCategory.Null:
            case TypeCategory.Others:
            default:
                return(false);
            }
        }
示例#11
0
        private static bool TryToArray(
            XInfo from,
            XInfo to,
            object value,
            out object result,
            string format = "")
        {
            result = null;

            try {
                var elementType = to
                                  .ElementInfos
                                  .FirstOrDefault()
                                  .Type;
                var genericListTypeRunTime = typeof(List <>)
                                             .MakeGenericType(new[] { elementType });
                var genericList = Activator.CreateInstance(
                    genericListTypeRunTime
                    );
                var genericListType = genericList.GetType();

                // Add
                var addInfo = genericListType
                              .GetMethods()
                              .FirstOrDefault(x => x.Name == "Add");
                if (from.Category == TypeCategory.Array)
                {
                    if (to.ElementInfos.Count() == 1)
                    {
                        var datas = value as IEnumerable;
                        if (null != datas)
                        {
                            var en = datas.GetEnumerator();
                            while (en.MoveNext())
                            {
                                object val;
                                if (TryTo(
                                        en.Current,
                                        elementType,
                                        out val))
                                {
                                    addInfo.Invoke(
                                        genericList,
                                        new object[] { val }
                                        );
                                }
                                else
                                {
                                    return(false);
                                }
                            }
                        }
                    }
                    else
                    {
                        //
                    }
                }
                else
                {
                    if (to.ElementInfos.Count() == 1)
                    {
                        object val;

                        if (value.Is(elementType))
                        {
                            addInfo.Invoke(
                                genericList,
                                new object[] { value }
                                );
                        }
                        else
                        {
                            if (TryTo(value, elementType, out val))
                            {
                                addInfo.Invoke(
                                    genericList,
                                    new object[] { val }
                                    );
                            }
                            else
                            {
                                return(false);
                            }
                        }
                    }
                    else
                    {
                        //
                    }
                }

                if (to.Type.FullName == genericListType.FullName)
                {
                    // List
                    result = genericList;
                }
                else if (to.Type.Is <IQueryable>())
                {
                    // IQueryable
                    result = ((IList)genericList).AsQueryable();
                }
                else if (
                    to.Category == TypeCategory.Interface
                    &&
                    to.Type.Is <IList>())
                {
                    // IList
                    result = (IList)genericList;
                }
                else
                {
                    // Array
                    var toarrayInfo = genericListType
                                      .GetMethods()
                                      .FirstOrDefault(x => x.Name == "ToArray");
                    if (null == toarrayInfo)
                    {
                        return(false);
                    }
                    result = toarrayInfo.Invoke(
                        genericList,
                        new object[] { }
                        );
                }

                return(true);
            } catch (Exception ex) {
                LogRecord
                .Create()
                //.Add("From", from?.Type.Name)
                //.Add("To", to?.Type.Name)
                //.Add("ValueType", value?.GetType().Name)
                //.Add("Value", value)
                //.Add(ex)
                .Error();
                return(false);
            }
        }
示例#12
0
        private static bool TryTo(
            object value,
            Type type,
            out object result,
            string format = "")
        {
            result = string.Empty;
            if (null == value || null == type)
            {
                return(false);
            }

            var from = ToCache.Get(value);

            var interceptor = ToInterceptor.Get(from.Type);

            if (null != interceptor)
            {
                return(interceptor.TryTo(
                           value,
                           type,
                           out result,
                           format
                           ));
            }

            var to = ToCache.Get(type);

            try {
                switch (from.Category)
                {
                case TypeCategory.Array:
                    object arry = value as Array;
                    if (null == arry)
                    {
                        var toarrayInfo = from
                                          .Type
                                          .GetMethods()
                                          .FirstOrDefault(x =>
                                                          x.Name == "ToArray"
                                                          );
                        if (null == toarrayInfo)
                        {
                            return(false);
                        }
                        arry = toarrayInfo.Invoke(
                            value,
                            new object[] { }
                            );
                    }
                    if (null == arry)
                    {
                        return(false);
                    }
                    return(TryFromArray(
                               arry as Array,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Enum:
                    return(TryFromEnum(
                               value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Interface:
                    return(TryFromInterface(
                               value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Class:
                    return(TryFromClass(
                               value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Stream:
                    return(TryFromStream(
                               value as Stream,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Color:
                //return TryFromColor(
                //	(Color)value,
                //	from,
                //	to,
                //	out result,
                //	format
                //);
                case TypeCategory.String:
                    return(TryFromString(
                               value as string,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.DateTime:
                    return(TryFromDateTime(
                               (DateTime)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Decimal:
                    return(TryFromDecimal(
                               (decimal)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Boolean:
                    return(TryFromBoolean(
                               (bool)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Char:
                    return(TryFromChar(
                               (char)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Byte:
                    return(TryFromByte(
                               (byte)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.SByte:
                    return(TryFromSByte(
                               (sbyte)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Int16:
                    return(TryFromInt16(
                               (short)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.UInt16:
                    return(TryFromUInt16(
                               (ushort)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Int32:
                    return(TryFromInt32(
                               (int)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.UInt32:
                    return(TryFromUInt32(
                               (uint)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.IntPtr:
                    return(TryFromIntPtr(
                               (IntPtr)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.UIntPtr:
                    return(TryFromUIntPtr(
                               (UIntPtr)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Int64:
                    return(TryFromInt64(
                               (long)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.UInt64:
                    return(TryFromUInt64(
                               (ulong)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Single:
                    return(TryFromSingle(
                               (float)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Double:
                    return(TryFromDouble(
                               (double)value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Struct:
                    return(TryFromStruct(
                               value,
                               from,
                               to,
                               out result,
                               format
                               ));

                case TypeCategory.Null:
                    return(false);

                case TypeCategory.Others:
                    return(false);

                default:
                    return(false);
                }
            } catch (Exception ex) {
                LogRecord
                .Create()
                //.Add("Value", value?.ToString())
                //.Add("Type", type?.GetType().Name)
                //.Add("Result", result)
                //.Add("Format", format)
                //.Add(ex)
                .Error();
                return(false);
            }
        }