/// <summary>
        /// CONVERTING FROM byte[] to the generic type
        /// </summary>
        /// <typeparam name="TData"></typeparam>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static TData ConvertBack <TData>(byte[] dt)
        {
            if (dt == null)
            {
                return(default(TData));
            }

            Type td = typeof(TData);

            Func <byte[], object> f = null;

            if (dcb.TryGetValue(td, out f))
            {
                return((TData)f(dt));
            }

            if (td.Name.Equals("DbMJSON`1") || td.Name.Equals("DbCustomSerializer`1") || td.Name.Equals("DbXML`1"))
            {
                object o = Activator.CreateInstance(td);
                ((IDBConvertable)o).SetBytes(dt);
                return((TData)o);
            }

            if (td == TYPE_OBJECT)
            {
                throw DBriizeException.Throw(DBriizeException.eDBriizeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null);
            }


            if (td.GetTypeInfo().IsEnum)
            {
                var enumtype = Enum.GetUnderlyingType(td);
                if (dcbe.TryGetValue(enumtype, out f))
                {
                    return((TData)f(dt));
                }

                throw DBriizeException.Throw(DBriizeException.eDBriizeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null);
            }

            if (CustomSerializator.ByteArrayDeSerializator != null)
            {
                return((TData)CustomSerializator.ByteArrayDeSerializator(dt, td));
            }

            throw DBriizeException.Throw(DBriizeException.eDBriizeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null);
        }
Exemple #2
0
        /// <summary>
        /// CONVERTING FROM byte[] to the generic type
        /// </summary>
        /// <typeparam name="TData"></typeparam>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static TData ConvertBack <TData>(byte[] dt)
        {
            //OPT all to switch case

            if (dt == null)
            {
                return(default(TData));
            }

            Type td = typeof(TData);



            if (td == TYPE_BYTE_ARRAY)
            {
                return((TData)((object)dt));
            }
            else if (td == TYPE_ULONG)
            {
                return((TData)((object)dt.To_UInt64_BigEndian()));
            }
            else if (td == TYPE_ULONG_NULL)
            {
                return((TData)((object)dt.To_UInt64_BigEndian_NULL()));
            }
            else if (td == TYPE_DATETIME)
            {
                return((TData)((object)dt.To_DateTime()));
            }
            else if (td == TYPE_DATETIME_NULL)
            {
                return((TData)((object)dt.To_DateTime_NULL()));
            }
            else if (td == TYPE_STRING)
            {
                return((TData)((object)(new DbUTF8(dt)).Get));
            }
            else if (td.Name.Equals("DbMJSON`1") || td.Name.Equals("DbCustomSerializer`1") || td.Name.Equals("DbXML`1"))
            {
                object o = Activator.CreateInstance(td);
                ((IDBConvertable)o).SetBytes(dt);
                return((TData)o);
            }
            else if (td == TYPE_UINT)
            {
                return((TData)((object)dt.To_UInt32_BigEndian()));
            }
            else if (td == TYPE_UINT_NULL)
            {
                return((TData)((object)dt.To_UInt32_BigEndian_NULL()));
            }
            else if (td == TYPE_DECIMAL)
            {
                return((TData)((object)(dt.To_Decimal_BigEndian())));
            }
            else if (td == TYPE_DECIMAL_NULL)
            {
                return((TData)((object)(dt.To_Decimal_BigEndian_NULL())));
            }
            else if (td == TYPE_INT)
            {
                return((TData)((object)dt.To_Int32_BigEndian()));
            }
            else if (td == TYPE_INT_NULL)
            {
                return((TData)((object)dt.To_Int32_BigEndian_NULL()));
            }
            else if (td == TYPE_DOUBLE)
            {
                return((TData)((object)(dt.To_Double_BigEndian())));
            }
            else if (td == TYPE_DOUBLE_NULL)
            {
                return((TData)((object)(dt.To_Double_BigEndian_NULL())));
            }
            else if (td == TYPE_FLOAT)
            {
                return((TData)((object)(dt.To_Float_BigEndian())));
            }
            else if (td == TYPE_FLOAT_NULL)
            {
                return((TData)((object)(dt.To_Float_BigEndian_NULL())));
            }
            else if (td == TYPE_LONG)
            {
                return((TData)((object)dt.To_Int64_BigEndian()));
            }
            else if (td == TYPE_LONG_NULL)
            {
                return((TData)((object)dt.To_Int64_BigEndian_NULL()));
            }
            else if (td == TYPE_SHORT)
            {
                return((TData)((object)dt.To_Int16_BigEndian()));
            }
            else if (td == TYPE_SHORT_NULL)
            {
                return((TData)((object)dt.To_Int16_BigEndian_NULL()));
            }
            else if (td == TYPE_USHORT)
            {
                return((TData)((object)dt.To_UInt16_BigEndian()));
            }
            else if (td == TYPE_USHORT_NULL)
            {
                return((TData)((object)dt.To_UInt16_BigEndian_NULL()));
            }
            else if (td == TYPE_DB_ASCII)
            {
                //checked
                return((TData)((object)new DbAscii(dt)));
            }
            else if (td == TYPE_DB_UNICODE)
            {
                //checked
                return((TData)((object)new DbUnicode(dt)));
            }
            else if (td == TYPE_DB_UTF8)
            {
                //checked
                return((TData)((object)new DbUTF8(dt)));
            }
            else if (td == TYPE_BYTE)
            {
                return((TData)((object)dt.To_Byte()));
            }
            else if (td == TYPE_BYTE_NULL)
            {
                return((TData)((object)dt.To_Byte_NULL()));
            }
            else if (td == TYPE_SBYTE)
            {
                return((TData)((object)dt.To_SByte()));
            }
            else if (td == TYPE_SBYTE_NULL)
            {
                return((TData)((object)dt.To_SByte_NULL()));
            }
            else if (td == TYPE_BOOL)
            {
                return((TData)((object)dt.To_Bool()));
            }
            else if (td == TYPE_BOOL_NULL)
            {
                return((TData)((object)dt.To_Bool_NULL()));
            }
            else if (td == TYPE_CHAR)
            {
                return((TData)((object)dt.To_Char()));
            }
            else if (td == TYPE_CHAR_NULL)
            {
                return((TData)((object)dt.To_Char_NULL()));
            }
            else if (td == TYPE_GUID)
            {
                return((TData)((object)new Guid(dt)));
            }
            else if (td == TYPE_OBJECT)
            {
                throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null);
            }
            else if (td.GetTypeInfo().IsEnum)
            {
                var enumtype = Enum.GetUnderlyingType(td);

                if (enumtype == TYPE_INT)
                {
                    return((TData)((object)dt.To_Int32_BigEndian()));
                }
                else if (enumtype == TYPE_LONG)
                {
                    return((TData)((object)dt.To_Int64_BigEndian()));
                }
                else if (enumtype == TYPE_UINT)
                {
                    return((TData)((object)dt.To_UInt32_BigEndian()));
                }
                else if (enumtype == TYPE_ULONG)
                {
                    return((TData)((object)dt.To_UInt64_BigEndian()));
                }
                else if (enumtype == TYPE_USHORT)
                {
                    return((TData)((object)dt.To_UInt16_BigEndian()));
                }
                else if (enumtype == TYPE_SHORT)
                {
                    return((TData)((object)dt.To_Int16_BigEndian()));
                }
                else if (enumtype == TYPE_BYTE)
                {
                    return((TData)((object)dt.To_Byte()));
                }
                else if (enumtype == TYPE_SBYTE)
                {
                    return((TData)((object)dt.To_SByte()));
                }
                else
                {
                    throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null);
                }
            }
            else
            {
                //Trying byte deserialization for unknown object, in case if byte serializer is set
                if (CustomSerializator.ByteArrayDeSerializator != null)
                {
                    return((TData)CustomSerializator.ByteArrayDeSerializator(dt, td));
                }

                throw DBreezeException.Throw(DBreezeException.eDBreezeExceptions.UNSUPPORTED_DATATYPE, td.ToString(), null);
            }

            //return default(TData);
        }