public void Initialize(Type concreteType, IGenericMapperConfiguration config) { // Get JSON accessor var jsonColumn = typeof(IGenericColumns).GetProperty(config.JsonColumn); _jsonAccessor = ReflectionTool.PropertyAccessor <IGenericColumns, string>(jsonColumn); var baseProperties = typeof(TBase).GetProperties().Select(p => p.Name).ToArray(); var configuredProperties = config.PropertyConfigs.Select(cm => cm.PropertyName); var readOnlyProperties = concreteType.GetProperties() .Where(p => p.GetSetMethod() == null).Select(p => p.Name).ToArray(); // The json should not contain base, configured nor readonly properties var jsonIgnoredProperties = baseProperties .Concat(configuredProperties) .Concat(readOnlyProperties).ToArray(); _jsonSettings = JsonSettings.Minimal .Overwrite(j => j.ContractResolver = new DifferentialContractResolver <TReference>(jsonIgnoredProperties)); // Properties where no mapper should be created for: base and read only properties var mapperIgnoredProperties = baseProperties .Concat(readOnlyProperties).ToArray(); _configuredMappers = config.PropertyConfigs.Where(pc => !mapperIgnoredProperties.Contains(pc.PropertyName)) .Select(pc => MapperFactory.Create(pc, concreteType)).ToArray(); }
public void Initialize(Type concreteType, IGenericMapperConfiguration config) { // Get JSON accessor var jsonColumn = typeof(IGenericColumns).GetProperty(config.JsonColumn); JsonAccessor = ReflectionTool.PropertyAccessor <IGenericColumns, string>(jsonColumn); var baseProperties = typeof(TBase).GetProperties() .Select(p => p.Name); var configuredProperties = config.PropertyConfigs.Select(cm => cm.PropertyName); var ignoredProperties = baseProperties.Concat(configuredProperties).ToArray(); _jsonSettings = JsonSettings.Minimal .Overwrite(j => j.ContractResolver = new DifferentialContractResolver <TReference>(ignoredProperties)); _configuredMappers = config.PropertyConfigs.Select(pc => MapperFactory.Create(pc, concreteType)).ToArray(); }