public void ReadCell(ExcelRange cell, object propertyOwner, PropertyInfo targetProperty, Func <PropertyAndOwnerInstance, bool> defaultShouldProcessCellDecision, Func <ExcelRange, Type, PropertyAndOwnerInstance, IValueConverter, object> defaultConvertCellValueToType, Action <PropertyAndOwnerInstance, object> defaultPropertySetter, IValueConverter defaultValueConverter) { var pao = new PropertyAndOwnerInstance(targetProperty, propertyOwner); if (!defaultShouldProcessCellDecision(pao)) { return; } var cellValue = defaultConvertCellValueToType(cell, targetProperty.PropertyType, pao, defaultValueConverter); if (cellValue != null) { defaultPropertySetter(pao, cellValue); } }
public void ReadCellValue(ExcelRange cell, object owner, PropertyInfo targetProperty, XlsxSerializerSettings settings) { if (ReflectionHelper.GetIsCollection(targetProperty.PropertyType, out var collectionItemType, true)) { var collection = XlsCollectionDeserializerCore.DeserializeCollection(collectionItemType, cell.Worksheet, () => Activator.CreateInstance(collectionItemType), cell.Start.Row - 1, cell.Start.Column - 1, settings).OfType<object>().ToList(); ReflectionHelper.PopulateCollectionProperty(owner, targetProperty, collection); return; } var pao = new PropertyAndOwnerInstance(targetProperty, owner); Func<PropertyAndOwnerInstance, bool> defaultShouldProcessCellDecision = (p) => p.Property.CanWrite; Func<ExcelRange, Type, PropertyAndOwnerInstance, IValueConverter, object> defaultConvertCellValueToType = (cl, tp, p, converter) => { var cellValue = cl.Value; if (cellValue == null) { return null; } return converter.FromCellValue(tp, cellValue); }; Action<PropertyAndOwnerInstance, object> defaultPropertySetter = (p, v) => p.Property.SetValue(p.PropertyOwner, v); settings.CellReaderInterceptor.ReadCell(cell, owner, targetProperty, defaultShouldProcessCellDecision, defaultConvertCellValueToType, defaultPropertySetter, settings); }