public byte[] GetBytes(WriterCompatibilityMode writerCompatibilityMode) { switch (writerCompatibilityMode) { case WriterCompatibilityMode.Outlook2007RTM: case WriterCompatibilityMode.Outlook2007SP2: WriterVersion2 = Outlook2007VersionSignature; break; case WriterCompatibilityMode.Outlook2010RTM: WriterVersion2 = Outlook2010VersionSignature; break; default: WriterVersion2 = Outlook2003VersionSignature; break; } if (ModifiedInstanceDates.Count > DeletedInstanceDates.Count) { throw new InvalidRecurrencePatternException("Invalid exception data"); } if (ExceptionList.Count != ModifiedInstanceDates.Count) { throw new InvalidRecurrencePatternException("Invalid exception data"); } MemoryStream stream = new MemoryStream(); LittleEndianWriter.WriteUInt16(stream, ReaderVersion); LittleEndianWriter.WriteUInt16(stream, WriterVersion); LittleEndianWriter.WriteUInt16(stream, (ushort)RecurFrequency); LittleEndianWriter.WriteUInt16(stream, (ushort)PatternType); LittleEndianWriter.WriteUInt16(stream, CalendarType); LittleEndianWriter.WriteUInt32(stream, FirstDateTime); LittleEndianWriter.WriteUInt32(stream, Period); LittleEndianWriter.WriteUInt32(stream, SlidingFlag); WritePatternTypeSpecific(stream); LittleEndianWriter.WriteUInt32(stream, (uint)EndType); LittleEndianWriter.WriteUInt32(stream, OccurrenceCount); LittleEndianWriter.WriteUInt32(stream, FirstDOW); LittleEndianWriter.WriteUInt32(stream, (uint)DeletedInstanceDates.Count); // [MS-OXOCAL] DeletedInstanceDates - The dates are ordered from earliest to latest foreach (DateTime date in ListUtils.GetSorted(DeletedInstanceDates)) { DateTimeHelper.WriteDateTimeInMinutes(stream, date); } LittleEndianWriter.WriteUInt32(stream, (uint)ModifiedInstanceDates.Count); // [MS-OXOCAL] ModifiedInstanceDates - The dates are ordered from earliest to latest foreach (DateTime date in ListUtils.GetSorted(ModifiedInstanceDates)) { DateTimeHelper.WriteDateTimeInMinutes(stream, date); } DateTimeHelper.WriteDateTimeInMinutes(stream, StartDate); DateTimeHelper.WriteDateTimeInMinutes(stream, EndDate); LittleEndianWriter.WriteUInt32(stream, ReaderVersion2); LittleEndianWriter.WriteUInt32(stream, WriterVersion2); LittleEndianWriter.WriteUInt32(stream, StartTimeOffset); LittleEndianWriter.WriteUInt32(stream, EndTimeOffset); LittleEndianWriter.WriteUInt16(stream, (ushort)ExceptionList.Count); foreach (ExceptionInfoStructure exception in ExceptionList) { exception.WriteBytes(stream); } uint reservedBlock1Size = 0; LittleEndianWriter.WriteUInt32(stream, reservedBlock1Size); foreach (ExceptionInfoStructure exception in ExceptionList) { exception.WriteExtendedException(stream, writerCompatibilityMode); } uint reservedBlock2Size = 0; LittleEndianWriter.WriteUInt32(stream, reservedBlock2Size); return(stream.ToArray()); }