/// <summary>
        ///
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="type"></param>
        /// <param name="obj"></param>
        protected void DoSerialize(MemoryStream stream, Type type, object obj)
        {
            Type valueType = null;

            if (obj != null && !type.IsNullableType())
            {
                valueType = obj.GetType();
            }

            Type singleType = (valueType == null ? type : valueType);

            if (DepthType == EnumDepthType.Depth)
            {
                if (obj != null)
                {
                    singleType = singleType.GetUnderlyingType();
                }
                SerializeAssemblyType(stream, singleType);
            }
            else if (DepthType == EnumDepthType.Normal)
            {
                if (obj != null)
                {
                    singleType = singleType.GetUnderlyingType();
                }
                SerializeNullAssemblyType(stream, singleType);
            }

            byte[] buffer;
            if (ByteConverter.SupportType(singleType))
            {
                buffer = ByteConverterFactory.ToBytes(singleType, obj);
                stream.Write(buffer, 0, buffer.Length);
            }
            else if (ByteNullableConverter.SupportType(singleType))
            {
                buffer = ByteConverterFactory.ToBytes(singleType, obj);
                stream.Write(buffer, 0, buffer.Length);
            }
            else if (singleType == typeof(DataTable))
            {
                string table = DataTableSerializer.SerializeDataTableXml((DataTable)obj, "SerializeDataTable");
                if (obj == null)
                {
                    buffer = ByteConverter.ToBytes <int>(-1);
                    stream.Write(buffer, 0, buffer.Length);
                }
                else
                {
                    SerializeString(stream, table);
                }
            }
            else if (singleType == typeof(string))
            {
                if (obj == null)
                {
                    buffer = ByteConverter.ToBytes <int>(-1);
                    stream.Write(buffer, 0, buffer.Length);
                }
                else
                {
                    SerializeString(stream, obj);
                }
            }

            else if (obj is _Type)
            {
                if (obj == null)
                {
                    buffer = ByteConverter.ToBytes <int>(-1);
                    stream.Write(buffer, 0, buffer.Length);
                }
                else
                {
                    SerializeString(stream, ((_Type)obj).AssemblyQualifiedName);
                }
            }
            else if (singleType == typeof(byte[]))
            {
                if (obj == null)
                {
                    buffer = ByteConverter.ToBytes <int>(-1);
                    stream.Write(buffer, 0, buffer.Length);
                }
                else
                {
                    SerializeBytes(stream, obj);
                }
            }
            else
            {//
                if (IsGenericTypeList(singleType))
                {
                    if (obj == null)
                    {
                        buffer = ByteConverter.ToBytes <int>(-1);
                        stream.Write(buffer, 0, 4);
                    }
                    else
                    {
                        SerializeList(stream, obj, singleType);
                    }
                }
                else if (IsGenericTypeDictionary(singleType))
                {
                    if (obj == null)
                    {
                        buffer = ByteConverter.ToBytes <int>(-1);
                        stream.Write(buffer, 0, 4);
                    }
                    else
                    {
                        SerializeDictionary(stream, obj, singleType);
                    }
                }
                else if (singleType.IsArray)
                {
                    if (obj == null)
                    {
                        buffer = ByteConverter.ToBytes <int>(-1);
                        stream.Write(buffer, 0, 4);
                    }
                    else
                    {
                        SerializeArray(stream, obj, singleType);
                    }
                }
                else
                {
                    if (singleType.IsGenericType)
                    {
                        throw new DMSFrameException(string.Format("{0}", singleType));
                    }
                    this.DoSerializeComplicatedType(singleType, obj, stream);
                }
            }
        }
Exemple #2
0
 /// <summary>
 /// 以结构对象的形式返回指定的字节数组
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="t"></param>
 /// <returns></returns>
 public static byte[] ToBytes <T>(T t)
 {
     return(ByteConverterFactory.ToBytes(typeof(T), t));
 }