/// <summary>
        /// Deploys the descriptor base.
        /// </summary>
        /// <param name="memberInfo">The member information.</param>
        /// <param name="attribute">The attribute.</param>
        /// <param name="instance">The instance.</param>
        protected void deployDescriptorBase(MemberInfo memberInfo, fileDataBaseAttribute attribute, Object instance = null)
        {
            filenameMode       = attribute.filenameMode;
            nameOrPropertyPath = attribute.nameOrPropertyPath;
            options            = attribute.options;
            memberMetaInfo     = new settingsMemberInfoEntry(memberInfo);

            name        = memberMetaInfo.displayName.or(memberInfo.Name);
            description = memberMetaInfo.description;
            formatMode  = attribute.formatMode;

            if (memberInfo is PropertyInfo)
            {
                PropertyInfo pi = memberInfo as PropertyInfo;
                type = pi.PropertyType;

                if (type.GetInterface(nameof(ISupportLoadSave)) != null)
                {
                    options |= fileDataPropertyOptions.SupportLoadSave;

                    if (formatMode == fileDataPropertyMode.autoTextOrXml)
                    {
                        formatMode = fileDataPropertyMode.XML;
                    }
                }

                if (formatMode == fileDataPropertyMode.autoTextOrXml)
                {
                    if (type == typeof(String))
                    {
                        formatMode = fileDataPropertyMode.text;
                    }
                    else if (type == typeof(List <String>))
                    {
                        if (options.HasFlag(fileDataPropertyOptions.itemAsFile))
                        {
                            formatMode = fileDataPropertyMode.text;
                        }
                        else
                        {
                            formatMode = fileDataPropertyMode.XML;
                        }
                    }
                    else
                    {
                        formatMode = fileDataPropertyMode.XML;
                    }
                }
            }
            else if (memberInfo is Type)
            {
                type = memberInfo as Type;

                if (formatMode == fileDataPropertyMode.autoTextOrXml)
                {
                    formatMode = fileDataPropertyMode.XML;
                }
            }

            switch (filenameMode)
            {
            case fileDataFilenameMode.customName:
                filename = attribute.nameOrPropertyPath;
                break;

            case fileDataFilenameMode.memberInfoName:
                filename = memberInfo.Name.getCleanFilepath("");
                break;

            case fileDataFilenameMode.propertyValue:
                if (instance != null)
                {
                    PropertyExpression pexp = new PropertyExpression(instance, attribute.nameOrPropertyPath);
                    filename = pexp.getValue().toStringSafe(memberInfo.Name).getCleanFilepath("");
                }
                else
                {
                    filename = attribute.nameOrPropertyPath.getCleanFilepath("");
                }
                break;
            }
        }