public void Serialize(System.IO.TextWriter wrtr) { if (End != null && Start != null && End < Start) { End = Start; } wrtr.BeginBlock("VEVENT"); wrtr.Property("UID", UID); if (Attendees != null) { foreach (var attendee in Attendees) { wrtr.Property("ATTENDEE", attendee); } } if (Categories != null && Categories.Count > 0) { wrtr.Property("CATEGORIES", Categories); } wrtr.Property("CLASS", Class); wrtr.Property("CREATED", Created); wrtr.Property("DESCRIPTION", Description); NameValueCollection startParameter = new NameValueCollection(); NameValueCollection endParameter = new NameValueCollection(); if (!String.IsNullOrEmpty(StartTzid)) { startParameter.Add("TZID", StartTzid); } if (!String.IsNullOrEmpty(EndTzid)) { endParameter.Add("TZID", EndTzid); } if (!IsAllDayEvent) { wrtr.Property("DTSTART", Start, parameters: startParameter); wrtr.Property("DTEND", End, parameters: endParameter); } else { wrtr.Property("DTSTART", Start.Value.ToString("yyyyMMdd"), parameters: startParameter); wrtr.Property("DTEND", End.Value.ToString("yyyyMMdd"), parameters: endParameter); } wrtr.Property("DTSTAMP", DTSTAMP); wrtr.Property("LAST-MODIFIED", LastModified); wrtr.Property("LOCATION", Location); wrtr.Property("ORGANIZER", Organizer); wrtr.Property("PRIORITY", Priority); wrtr.Property("SEQUENCE", Sequence); wrtr.Property("STATUS", Status); wrtr.Property("SUMMARY", Summary); if (Recurrences.Any()) { foreach (var recurrence in Recurrences) { wrtr.Property("RRULE", recurrence.ToString(), encoded: true); } } if (ExDates.Any()) { if (!IsAllDayEvent) { foreach (var exdate in ExDates) { wrtr.Property("EXDATE", exdate); } } else { foreach (var exdate in ExDates) { //allday NameValueCollection extDateParam = new NameValueCollection(); extDateParam.Add("VALUE", "DATE"); wrtr.Property("EXDATE", exdate.ToString("yyyyMMdd"), parameters: extDateParam); } } } wrtr.Property("TRANSP", Transparency); wrtr.Property("URL", Url); if (Properties != null) { foreach (var prop in Properties) { wrtr.Property(prop.Item1, prop.Item2, parameters: prop.Item3); } } if (Alarms != null) { foreach (var alarm in Alarms) { alarm.Serialize(wrtr); } } wrtr.EndBlock("VEVENT"); }
public void Deserialize(System.IO.TextReader rdr, Serializer serializer) { string name, value, rigthPart; var parameters = new System.Collections.Specialized.NameValueCollection(); while (rdr.Property(out name, out value, out rigthPart, parameters) && !string.IsNullOrEmpty(name)) { switch (name.ToUpper()) { case "BEGIN": switch (value) { case "VALARM": var a = serializer.GetService <Alarm>(); a.Deserialize(rdr, serializer); Alarms.Add(a); break; } break; case "ATTENDEE": var contact = new Contact(); contact.Deserialize(value, parameters); Attendees.Add(contact); break; case "CATEGORIES": Categories = value.SplitEscaped().ToList(); break; case "CLASS": Class = value.ToEnum <Classes>(); break; case "CREATED": Created = value.ToDateTime(); break; case "DESCRIPTION": Description = value; break; case "DTEND": End = value.ToDateTime(); EndTzid = parameters["TZID"]; break; case "DTSTAMP": DTSTAMP = value.ToDateTime().GetValueOrDefault(); break; case "DTSTART": Start = value.ToDateTime(); StartTzid = parameters["TZID"]; break; case "LAST-MODIFIED": LastModified = value.ToDateTime(); break; case "LOCATION": Location = value; break; case "ORGANIZER": Organizer = serializer.GetService <Contact>(); Organizer.Deserialize(value, parameters); break; case "PRIORITY": Priority = value.ToInt(); break; case "SEQUENCE": Sequence = value.ToInt(); break; case "STATUS": Status = value.ToEnum <Statuses>(); break; case "SUMMARY": Summary = value; break; case "TRANSP": Transparency = value; break; case "UID": UID = value; break; case "URL": Url = value.ToUri(); break; case "ATTACH": var attach = value.ToUri(); if (attach != null) { Attachments.Add(attach); } break; case "RRULE": var rule = serializer.GetService <Recurrence>(); rule.Deserialize(null, parameters); Recurrences.Add(rule); break; case "EXDATE": ExDates.Add(value.ToDateTime().GetValueOrDefault()); break; case "END": return; default: Properties.Add(Tuple.Create(name, value, parameters)); break; } } }