
            this._serializer2.PackTo(packer, objectTree.MaxFrameSize);
            this._serializer0.PackTo(packer, "maxInboundRate");
            this._serializer2.PackTo(packer, objectTree.MaxInboundRate);
            this._serializer0.PackTo(packer, "maxMessageSize");
            this._serializer2.PackTo(packer, objectTree.MaxMessageSize);
            this._serializer0.PackTo(packer, "serverId");
            this._serializer0.PackTo(packer, objectTree.ServerId);
        }
        
        protected override IO.Ably.ConnectionDetails UnpackFromCore(MsgPack.Unpacker unpacker) {
            IO.Ably.ConnectionDetails result = default(IO.Ably.ConnectionDetails);
            result = new IO.Ably.ConnectionDetails();
            if (unpacker.IsArrayHeader) {
                int unpacked = default(int);
                int itemsCount = default(int);
                itemsCount = MsgPack.Serialization.UnpackHelpers.GetItemsCount(unpacker);
                string nullable = default(string);
                if ((unpacked < itemsCount)) {
                    nullable = MsgPack.Serialization.UnpackHelpers.UnpackStringValue(unpacker, typeof(IO.Ably.ConnectionDetails), "System.String clientId");
                }
                if (((nullable == null) 
                            == false)) {
                    result.ClientId = nullable;
                }
                unpacked = (unpacked + 1);
                string nullable0 = default(string);
                if ((unpacked < itemsCount)) {
                    nullable0 = MsgPack.Serialization.UnpackHelpers.UnpackStringValue(unpacker, typeof(IO.Ably.ConnectionDetails), "System.String connectionKey");
                }
                if (((nullable0 == null) 
                            == false)) {
                    result.ConnectionKey = nullable0;
                }
                unpacked = (unpacked + 1);
                System.Nullable<System.TimeSpan> nullable1 = default(System.Nullable<System.TimeSpan>);
                if ((unpacked < itemsCount)) {
                    if ((unpacker.Read() == false)) {
                        throw MsgPack.Serialization.SerializationExceptions.NewMissingItem(2);
                    }
                    if (((unpacker.IsArrayHeader == false) 
                                && (unpacker.IsMapHeader == false))) {
                        nullable1 = this._serializer1.UnpackFrom(unpacker);
                    }
                    else {
                        MsgPack.Unpacker disposable = default(MsgPack.Unpacker);
                        disposable = unpacker.ReadSubtree();
                        try {
                            nullable1 = this._serializer1.UnpackFrom(disposable);
                        }
                        finally {
                            if (((disposable == null) 
                                        == false)) {
                                disposable.Dispose();
                            }
                        }
                    }
                }
                if (nullable1.HasValue) {
                    result.ConnectionStateTtl = nullable1;
                }
                unpacked = (unpacked + 1);
                System.Nullable<long> nullable2 = default(System.Nullable<long>);
                if ((unpacked < itemsCount)) {
                    nullable2 = MsgPack.Serialization.UnpackHelpers.UnpackNullableInt64Value(unpacker, typeof(IO.Ably.ConnectionDetails), "Int64 maxFrameSize");
                }
                if (nullable2.HasValue) {
                    result.MaxFrameSize = nullable2.Value;
                }
                unpacked = (unpacked + 1);
                System.Nullable<long> nullable3 = default(System.Nullable<long>);
                if ((unpacked < itemsCount)) {
                    nullable3 = MsgPack.Serialization.UnpackHelpers.UnpackNullableInt64Value(unpacker, typeof(IO.Ably.ConnectionDetails), "Int64 maxInboundRate");
                }
                if (nullable3.HasValue) {
                    result.MaxInboundRate = nullable3.Value;
                }
                unpacked = (unpacked + 1);
                System.Nullable<long> nullable4 = default(System.Nullable<long>);
                if ((unpacked < itemsCount)) {
                    nullable4 = MsgPack.Serialization.UnpackHelpers.UnpackNullableInt64Value(unpacker, typeof(IO.Ably.ConnectionDetails), "Int64 maxMessageSize");
                }
                if (nullable4.HasValue) {
                    result.MaxMessageSize = nullable4.Value;
                }
                unpacked = (unpacked + 1);
                string nullable5 = default(string);
                if ((unpacked < itemsCount)) {
                    nullable5 = MsgPack.Serialization.UnpackHelpers.UnpackStringValue(unpacker, typeof(IO.Ably.ConnectionDetails), "System.String serverId");
                }
                if (((nullable5 == null) 
                            == false)) {
                    result.ServerId = nullable5;
                }
                unpacked = (unpacked + 1);
            }
            else {
                int itemsCount0 = default(int);
                itemsCount0 = MsgPack.Serialization.UnpackHelpers.GetItemsCount(unpacker);
                for (int i = 0; (i < itemsCount0); i = (i + 1)) {
                    string key = default(string);
                    string nullable6 = default(string);
                    nullable6 = MsgPack.Serialization.UnpackHelpers.UnpackStringValue(unpacker, typeof(IO.Ably.ConnectionDetails), "MemberName");
                    if (((nullable6 == null) 
                                == false)) {
                        key = nullable6;
                    }
                    else {
                        throw MsgPack.Serialization.SerializationExceptions.NewNullIsProhibited("MemberName");
                    }
                    if ((key == "serverId")) {
                        string nullable13 = default(string);
                        nullable13 = MsgPack.Serialization.UnpackHelpers.UnpackStringValue(unpacker, typeof(IO.Ably.ConnectionDetails), "System.String serverId");
                        if (((nullable13 == null) 
                                    == false)) {
                            result.ServerId = nullable13;
                        }
                    }
                    else {
                        if ((key == "maxMessageSize")) {
                            System.Nullable<long> nullable12 = default(System.Nullable<long>);
                            nullable12 = MsgPack.Serialization.UnpackHelpers.UnpackNullableInt64Value(unpacker, typeof(IO.Ably.ConnectionDetails), "Int64 maxMessageSize");
                            if (nullable12.HasValue) {
                                result.MaxMessageSize = nullable12.Value;
                            }
                        }
                        else {
                            if ((key == "maxInboundRate")) {
                                System.Nullable<long> nullable11 = default(System.Nullable<long>);
                                nullable11 = MsgPack.Serialization.UnpackHelpers.UnpackNullableInt64Value(unpacker, typeof(IO.Ably.ConnectionDetails), "Int64 maxInboundRate");
                                if (nullable11.HasValue) {
                                    result.MaxInboundRate = nullable11.Value;
                                }
                            }
                            else {
                                if ((key == "maxFrameSize")) {
                                    System.Nullable<long> nullable10 = default(System.Nullable<long>);
                                    nullable10 = MsgPack.Serialization.UnpackHelpers.UnpackNullableInt64Value(unpacker, typeof(IO.Ably.ConnectionDetails), "Int64 maxFrameSize");
                                    if (nullable10.HasValue) {
                                        result.MaxFrameSize = nullable10.Value;
                                    }
                                }
                                else {
                                    if ((key == "connectionStateTtl")) {
                                        System.Nullable<System.TimeSpan> nullable9 = default(System.Nullable<System.TimeSpan>);
                                        if ((unpacker.Read() == false)) {
                                            throw MsgPack.Serialization.SerializationExceptions.NewMissingItem(i);
                                        }
                                        if (((unpacker.IsArrayHeader == false) 
                                                    && (unpacker.IsMapHeader == false))) {
                                            nullable9 = this._serializer1.UnpackFrom(unpacker);
                                        }
                                        else {
                                            MsgPack.Unpacker