protected virtual void SerializePrimitive(CalendarWriter writer, object o) { var otype = o.GetType(); switch (Type.GetTypeCode(otype)) { case TypeCode.Boolean: writer.Write((bool)o ? "TRUE" : "FALSE"); break; case TypeCode.Char: writer.Write((char)o); break; case TypeCode.SByte: writer.Write((sbyte) o); break; case TypeCode.Byte: writer.Write((byte)o); break; case TypeCode.Int16: writer.Write((short)o); break; case TypeCode.UInt16: writer.Write((ushort)o); break; case TypeCode.Int32: writer.Write((int)o); break; case TypeCode.UInt32: writer.Write((int)o); break; case TypeCode.Int64: writer.Write((int)o); break; case TypeCode.UInt64: writer.Write((int)o); break; case TypeCode.Single: writer.Write((float)o); break; case TypeCode.Double: writer.Write((double)o); break; case TypeCode.Decimal: writer.Write((decimal)o); break; case TypeCode.String: writer.Write((string)o); break; default: if (otype == typeof(byte[])) writer.Write(Convert.ToBase64String((byte[])o, Base64FormattingOptions.InsertLineBreaks)); if (otype == typeof(Guid)) writer.Write(((Guid)o).ToString()); else writer.Write(o); break; } }
public virtual void Serialize(CalendarWriter writer, object o) { if (o == null) return; try { var otype = o.GetType(); if (otype.IsPrimitive || otype == typeof (string) || otype == (typeof (byte[])) || otype == typeof (Guid)) { SerializePrimitive(writer, o); return; } var serializable = o as ICalendarSerializable; if (serializable == null) throw new InvalidOperationException("Cannot serialize object of type:" + otype.FullName); serializable.WriteCalendar(writer); } catch (Exception ex) { if (ex is TargetInvocationException) ex = ex.InnerException; throw new InvalidOperationException("Calendar Serialization Error", ex); } finally { writer.Flush(); } }