/// <summary>
        /// Loads from json.
        /// </summary>
        /// <param name="jsonProperty">The json property.</param>
        /// <param name="service"></param>
        internal override void LoadFromJson(JsonObject jsonProperty, ExchangeService service)
        {
            foreach (string key in jsonProperty.Keys)
            {
                switch (key)
                {
                case XmlElementNames.UserId:
                    this.UserId = new UserId();
                    this.UserId.LoadFromJson(jsonProperty.ReadAsJsonObject(key), service);
                    break;

                case XmlElementNames.CanCreateItems:
                    this.canCreateItems = jsonProperty.ReadAsBool(key);
                    break;

                case XmlElementNames.CanCreateSubFolders:
                    this.canCreateSubFolders = jsonProperty.ReadAsBool(key);
                    break;

                case XmlElementNames.IsFolderOwner:
                    this.isFolderOwner = jsonProperty.ReadAsBool(key);
                    break;

                case XmlElementNames.IsFolderVisible:
                    this.isFolderVisible = jsonProperty.ReadAsBool(key);
                    break;

                case XmlElementNames.IsFolderContact:
                    this.isFolderContact = jsonProperty.ReadAsBool(key);
                    break;

                case XmlElementNames.EditItems:
                    this.editItems = jsonProperty.ReadEnumValue <PermissionScope>(key);
                    break;

                case XmlElementNames.DeleteItems:
                    this.deleteItems = jsonProperty.ReadEnumValue <PermissionScope>(key);
                    break;

                case XmlElementNames.ReadItems:
                    this.readItems = jsonProperty.ReadEnumValue <FolderPermissionReadAccess>(key);
                    break;

                case XmlElementNames.PermissionLevel:
                case XmlElementNames.CalendarPermissionLevel:
                    this.permissionLevel = jsonProperty.ReadEnumValue <FolderPermissionLevel>(key);
                    break;

                default:
                    break;
                }
            }

            this.AdjustPermissionLevel();
        }
 /// <summary>
 /// Copies the values of the individual permissions of the specified folder permission
 /// to this folder permissions.
 /// </summary>
 /// <param name="permission">The folder permission to copy the values from.</param>
 private void AssignIndividualPermissions(FolderPermission permission)
 {
     this.canCreateItems      = permission.CanCreateItems;
     this.canCreateSubFolders = permission.CanCreateSubFolders;
     this.isFolderContact     = permission.IsFolderContact;
     this.isFolderOwner       = permission.IsFolderOwner;
     this.isFolderVisible     = permission.IsFolderVisible;
     this.editItems           = permission.EditItems;
     this.deleteItems         = permission.DeleteItems;
     this.readItems           = permission.ReadItems;
 }
        /// <summary>
        /// Tries to read element from XML.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <returns>True if element was read.</returns>
        internal override bool TryReadElementFromXml(EwsServiceXmlReader reader)
        {
            switch (reader.LocalName)
            {
            case XmlElementNames.UserId:
                this.UserId = new UserId();
                this.UserId.LoadFromXml(reader, reader.LocalName);
                return(true);

            case XmlElementNames.CanCreateItems:
                this.canCreateItems = reader.ReadValue <bool>();
                return(true);

            case XmlElementNames.CanCreateSubFolders:
                this.canCreateSubFolders = reader.ReadValue <bool>();
                return(true);

            case XmlElementNames.IsFolderOwner:
                this.isFolderOwner = reader.ReadValue <bool>();
                return(true);

            case XmlElementNames.IsFolderVisible:
                this.isFolderVisible = reader.ReadValue <bool>();
                return(true);

            case XmlElementNames.IsFolderContact:
                this.isFolderContact = reader.ReadValue <bool>();
                return(true);

            case XmlElementNames.EditItems:
                this.editItems = reader.ReadValue <PermissionScope>();
                return(true);

            case XmlElementNames.DeleteItems:
                this.deleteItems = reader.ReadValue <PermissionScope>();
                return(true);

            case XmlElementNames.ReadItems:
                this.readItems = reader.ReadValue <FolderPermissionReadAccess>();
                return(true);

            case XmlElementNames.PermissionLevel:
            case XmlElementNames.CalendarPermissionLevel:
                this.permissionLevel = reader.ReadValue <FolderPermissionLevel>();
                return(true);

            default:
                return(false);
            }
        }
 /// <summary>
 /// Tries to read element from XML.
 /// </summary>
 /// <param name="reader">The reader.</param>
 /// <returns>True if element was read.</returns>
 internal override bool TryReadElementFromXml(EwsServiceXmlReader reader)
 {
     switch (reader.LocalName)
     {
         case XmlElementNames.UserId:
             this.UserId = new UserId();
             this.UserId.LoadFromXml(reader, reader.LocalName);
             return true;
         case XmlElementNames.CanCreateItems:
             this.canCreateItems = reader.ReadValue<bool>();
             return true;
         case XmlElementNames.CanCreateSubFolders:
             this.canCreateSubFolders = reader.ReadValue<bool>();
             return true;
         case XmlElementNames.IsFolderOwner:
             this.isFolderOwner = reader.ReadValue<bool>();
             return true;
         case XmlElementNames.IsFolderVisible:
             this.isFolderVisible = reader.ReadValue<bool>();
             return true;
         case XmlElementNames.IsFolderContact:
             this.isFolderContact = reader.ReadValue<bool>();
             return true;
         case XmlElementNames.EditItems:
             this.editItems = reader.ReadValue<PermissionScope>();
             return true;
         case XmlElementNames.DeleteItems:
             this.deleteItems = reader.ReadValue<PermissionScope>();
             return true;
         case XmlElementNames.ReadItems:
             this.readItems = reader.ReadValue<FolderPermissionReadAccess>();
             return true;
         case XmlElementNames.PermissionLevel:
         case XmlElementNames.CalendarPermissionLevel:
             this.permissionLevel = reader.ReadValue<FolderPermissionLevel>();
             return true;
         default:
             return false;
     }
 }
 /// <summary>
 /// Copies the values of the individual permissions of the specified folder permission
 /// to this folder permissions.
 /// </summary>
 /// <param name="permission">The folder permission to copy the values from.</param>
 private void AssignIndividualPermissions(FolderPermission permission)
 {
     this.canCreateItems = permission.CanCreateItems;
     this.canCreateSubFolders = permission.CanCreateSubFolders;
     this.isFolderContact = permission.IsFolderContact;
     this.isFolderOwner = permission.IsFolderOwner;
     this.isFolderVisible = permission.IsFolderVisible;
     this.editItems = permission.EditItems;
     this.deleteItems = permission.DeleteItems;
     this.readItems = permission.ReadItems;
 }