/// <summary> /// The CSV format isn't robust enough to describe if different assets define different /// types for the same field name. This method checks if a "Text" field has a Boolean /// or Number value and returns that type instead of Text. /// </summary> /// <returns>The field type.</returns> /// <param name="value">Value.</param> /// <param name="typeSpecifier">Type specifier.</param> private FieldType GuessFieldType(string value, string typeSpecifier) { if (string.Equals(typeSpecifier, "Text") && !string.IsNullOrEmpty(value)) { if (IsBoolean(value)) { return(FieldType.Boolean); } else if (IsNumber(value)) { return(FieldType.Number); } } return(Field.StringToFieldType(typeSpecifier)); }
/// <summary> /// Reads the asset fields. /// </summary> /// <param name="fieldNames">Field names.</param> /// <param name="fieldTypes">Field types.</param> /// <param name="ignore">List of field names to not add.</param> /// <param name="values">CSV values.</param> /// <param name="fields">Fields list of populate.</param> private void ReadAssetFields(string[] fieldNames, string[] fieldTypes, List <string> ignore, string[] values, List <Field> fields) { // Look for a special field named "InitialValueType" used in Variables section: var isInitialValueTypeKnown = false; var initialValueType = FieldType.Text; for (int i = 0; i < fieldNames.Length; i++) { if (string.Equals(fieldNames[i], "InitialValueType")) { initialValueType = Field.StringToFieldType(values[i]); isInitialValueTypeKnown = true; break; } } // Convert all fields: for (int i = 0; i < fieldNames.Length; i++) { if ((ignore != null) && ignore.Contains(fieldNames[i])) { continue; } if (string.Equals(values[i], "{{omit}}")) { continue; } if (string.IsNullOrEmpty(fieldNames[i])) { continue; } string title = fieldNames[i]; string value = values[i]; // Special handling required for Initial Value of Variables section: FieldType type = (string.Equals(title, "Initial Value") && isInitialValueTypeKnown) ? initialValueType : GuessFieldType(value, fieldTypes[i]); fields.Add(new Field(title, value, type)); } }