示例#1
0
        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;
            }

        }
示例#2
0
        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();
            }
            
        }