/// <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); } } }
/// <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)); }