private void ParseCellularValue(ITableParser tableParser, Action <string, string> addFieldMapping, object model, ExcelTemplatePath path, Dictionary <ExcelTemplatePath, int> enumerablesLengths) { var leafSetter = ObjectPropertySettersExtractor.ExtractChildObjectSetter(model, path); var leafModelType = ObjectPropertiesExtractor.ExtractChildObjectTypeFromPath(model.GetType(), path); if (path.HasArrayAccess) { ParseEnumerableValue(tableParser, addFieldMapping, model, path, leafSetter, leafModelType, enumerablesLengths); } else { ParseSingleValue(tableParser, addFieldMapping, leafSetter, path, leafModelType); } }
private void ParseFormValue(ITableParser tableParser, Action <string, string> addFieldMapping, object model, ICell cell, ExcelTemplatePath path) { var childSetter = ObjectPropertySettersExtractor.ExtractChildObjectSetter(model, path); var childModelType = ObjectPropertiesExtractor.ExtractChildObjectTypeFromPath(model.GetType(), path); var(childFormControlType, childFormControlName) = GetFormControlDescription(cell); if (path.HasArrayAccess) { throw new InvalidOperationException("Enumerables are not supported for form controls"); } var parser = parserCollection.GetFormValueParser(childFormControlType, childModelType); var parsedObject = parser.ParseOrDefault(tableParser, childFormControlName, childModelType); childSetter(parsedObject); addFieldMapping(path.RawPath, childFormControlName); }