/// <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; } }