private void ReadData(int dataTypeCd, WireMessage message, IStreamReader reader) { switch ((TypeCode)dataTypeCd) { case TypeCode.Boolean: message.Data = reader.ReadBoolean(); break; case TypeCode.Byte: message.Data = reader.ReadByte(); break; case TypeCode.Char: message.Data = reader.ReadChar(); break; case TypeCode.DateTime: message.Data = new DateTime(reader.ReadInt64()); break; case TypeCode.DBNull: reader.ReadByte(); message.Data = DBNull.Value; break; case TypeCode.Decimal: message.Data = reader.ReadDecimal(); break; case TypeCode.Double: message.Data = reader.ReadDouble(); break; case TypeCode.Empty: reader.ReadByte(); break; case TypeCode.Int16: message.Data = reader.ReadInt16(); break; case TypeCode.Int32: message.Data = reader.ReadInt32(); break; case TypeCode.Int64: message.Data = reader.ReadInt64(); break; case TypeCode.SByte: message.Data = reader.ReadSByte(); break; case TypeCode.Single: message.Data = reader.ReadSingle(); break; case TypeCode.String: message.Data = ReadString(reader); break; case TypeCode.UInt16: message.Data = reader.ReadUInt16(); break; case TypeCode.UInt32: message.Data = reader.ReadUInt32(); break; case TypeCode.UInt64: message.Data = reader.ReadUInt64(); break; default: { var len = reader.ReadInt32(); if (len > 0) { using (var tempStream = new ChunkedStream()) { var chunkSize = tempStream.ChunkSize; while (len > 0) { var bytes = reader.ReadBytes(chunkSize); var readLen = bytes?.Length ?? 0; if (readLen == 0) { throw new Exception(SerializationErrors.StreamNotContainingValidWireMessage); } len -= readLen; tempStream.Write(bytes, 0, readLen); } tempStream.Position = 0; message.Data = GetSerializer().Deserialize(tempStream); } } } break; } }