void Analyze() { foreach (var prop in Type.GetProperties(BindingFlags.Instance | BindingFlags.Public)) { if (!(Attribute.GetCustomAttribute(prop, typeof(IgnoreAttribute)) is IgnoreAttribute)) { var ci = new ColumnInfo(prop); // Both direction var attribs = Attribute.GetCustomAttributes(prop, typeof(ColumnAttribute)).Cast <ColumnAttribute>(); if (attribs.Any()) { foreach (var columnAttribute in attribs) { ci = new ColumnInfo(prop); // Both direction if (!string.IsNullOrEmpty(columnAttribute.Name)) { if (!ColumnsByName.ContainsKey(columnAttribute.Name)) { ColumnsByName.Add(columnAttribute.Name, new List <ColumnInfo>()); } ColumnsByName[columnAttribute.Name].Add(ci); } else if (!ColumnsByName.ContainsKey(prop.Name)) { ColumnsByName.Add(prop.Name, new List <ColumnInfo>() { ci }); } if (columnAttribute.Index > 0) { var idx = columnAttribute.Index - 1; if (!ColumnsByIndex.ContainsKey(idx)) { ColumnsByIndex.Add(idx, new List <ColumnInfo>()); } ColumnsByIndex[idx].Add(ci); } ci.Directions = columnAttribute.Directions; } } else if (!ColumnsByName.ContainsKey(prop.Name)) { ColumnsByName.Add(prop.Name, new List <ColumnInfo>() { ci }); } if (Attribute.GetCustomAttribute(prop, typeof(DataFormatAttribute)) is DataFormatAttribute dataFormatAttribute) { ci.BuiltinFormat = dataFormatAttribute.BuiltinFormat; ci.CustomFormat = dataFormatAttribute.CustomFormat; } if (Attribute.GetCustomAttribute(prop, typeof(FormulaResultAttribute)) is FormulaResultAttribute) { ci.FormulaResult = true; } if (Attribute.GetCustomAttribute(prop, typeof(JsonAttribute)) is JsonAttribute) { ci.Json = true; } } } }
void Analyze() { var props = Type.GetProperties(BindingFlags.Instance | BindingFlags.Public); foreach (var prop in props) { if (!(Attribute.GetCustomAttribute(prop, typeof(IgnoreAttribute)) is IgnoreAttribute)) { var ci = new ColumnInfo(prop); var attribs = Attribute.GetCustomAttributes(prop, typeof(ColumnAttribute)).Cast <ColumnAttribute>(); if (attribs.Any()) { foreach (var columnAttribute in attribs) { ci = new ColumnInfo(prop); if (!string.IsNullOrEmpty(columnAttribute.Name)) { if (!ColumnsByName.ContainsKey(columnAttribute.Name)) { ColumnsByName.Add(columnAttribute.Name, new List <ColumnInfo>()); } ColumnsByName[columnAttribute.Name].Add(ci); } else if (!ColumnsByName.ContainsKey(prop.Name)) { ColumnsByName.Add(prop.Name, new List <ColumnInfo>() { ci }); } if (columnAttribute.Index > 0) { var idx = columnAttribute.Index - 1; if (!ColumnsByIndex.ContainsKey(idx)) { ColumnsByIndex.Add(idx, new List <ColumnInfo>()); } ColumnsByIndex[idx].Add(ci); } ci.Directions = columnAttribute.Directions; } } else if (!ColumnsByName.ContainsKey(prop.Name)) { ColumnsByName.Add(prop.Name, new List <ColumnInfo>() { ci }); } if (Attribute.GetCustomAttribute(prop, typeof(DataFormatAttribute)) is DataFormatAttribute dataFormatAttribute) { ci.BuiltinFormat = dataFormatAttribute.BuiltinFormat; ci.CustomFormat = dataFormatAttribute.CustomFormat; } if (Attribute.GetCustomAttribute(prop, typeof(FormulaResultAttribute)) is FormulaResultAttribute) { ci.FormulaResult = true; } if (Attribute.GetCustomAttribute(prop, typeof(JsonAttribute)) is JsonAttribute) { ci.Json = true; } } } var hasDefaultConstructor = Type.IsValueType || Type.GetConstructor(Type.EmptyTypes) != null; if (!hasDefaultConstructor) { Constructor = Type.GetConstructors(BindingFlags.Public | BindingFlags.Instance) .OrderByDescending(c => c.GetParameters().Length).FirstOrDefault(); if (Constructor == null) { throw new ExcelMapperConvertException($"Type {Type.FullName} has no suitable constructor."); } ConstructorParams = Constructor.GetParameters() .Select((p, i) => (Param: p, Index: i, HasProp: props.Any(r => string.Equals(r.Name, p.Name, StringComparison.OrdinalIgnoreCase)))) .Where(p => p.HasProp) .ToDictionary(p => p.Param.Name, p => p.Param, StringComparer.OrdinalIgnoreCase); } }