static AmqpContractSerializer()
        {
            Dictionary <Type, SerializableType> types = new Dictionary <Type, SerializableType>()
            {
                { typeof(bool), SerializableType.CreateSingleValueType(typeof(bool)) },
                { typeof(byte), SerializableType.CreateSingleValueType(typeof(byte)) },
                { typeof(ushort), SerializableType.CreateSingleValueType(typeof(ushort)) },
                { typeof(uint), SerializableType.CreateSingleValueType(typeof(uint)) },
                { typeof(ulong), SerializableType.CreateSingleValueType(typeof(ulong)) },
                { typeof(sbyte), SerializableType.CreateSingleValueType(typeof(sbyte)) },
                { typeof(short), SerializableType.CreateSingleValueType(typeof(short)) },
                { typeof(int), SerializableType.CreateSingleValueType(typeof(int)) },
                { typeof(long), SerializableType.CreateSingleValueType(typeof(long)) },
                { typeof(float), SerializableType.CreateSingleValueType(typeof(float)) },
                { typeof(double), SerializableType.CreateSingleValueType(typeof(double)) },
                { typeof(decimal), SerializableType.CreateSingleValueType(typeof(decimal)) },
                { typeof(char), SerializableType.CreateSingleValueType(typeof(char)) },
                { typeof(DateTime), SerializableType.CreateSingleValueType(typeof(DateTime)) },
                { typeof(Guid), SerializableType.CreateSingleValueType(typeof(Guid)) },
                { typeof(ArraySegment <byte>), SerializableType.CreateSingleValueType(typeof(ArraySegment <byte>)) },
                { typeof(string), SerializableType.CreateSingleValueType(typeof(string)) },
                { typeof(AmqpSymbol), SerializableType.CreateSingleValueType(typeof(AmqpSymbol)) },
                { typeof(TimeSpan), SerializableType.CreateDescribedValueType <TimeSpan, long>("com.microsoft:timespan", (TimeSpan ts) => ts.Ticks, (long l) => TimeSpan.FromTicks(l)) },
                { typeof(Uri), SerializableType.CreateDescribedValueType <Uri, string>("com.microsoft:uri", (Uri u) => u.AbsoluteUri, (string s) => new Uri(s)) },
                { typeof(DateTimeOffset), SerializableType.CreateDescribedValueType <DateTimeOffset, long>("com.microsoft:datetime-offset", (DateTimeOffset d) => d.UtcTicks, (long l) => new DateTimeOffset(new DateTime(l, DateTimeKind.Utc))) },
                { typeof(object), SerializableType.CreateObjectType(typeof(object)) }
            };

            AmqpContractSerializer.builtInTypes = types;
            AmqpContractSerializer.Instance     = new AmqpContractSerializer();
        }