-
Notifications
You must be signed in to change notification settings - Fork 28
Closed
Labels
Description
When trying to auto map a class with dictonary that has collection values it causes a NullReferenceException.
Running version 1.7.0 from nuget AgileObjects.AgileMapper.
Running the following example will result in an exception catched by the try-catch:
public class A
{
public Dictionary<string, List<string>> Dict { get; set; }
}
public class B
{
public Dictionary<string, List<string>> Dict { get; set; }
}
try
{
var a = new A
{
Dict = new Dictionary<string, List<string>> {{"a", new List<string>{"b"}}}
};
var b = Mapper.Map(a).ToANew<B>();
}
catch (Exception ex)
{
var breakpointer = 0;
}Note: If List<string> is instead string[] it also crashes with the same exception.
Even GetPlanFor causes a crash:
Mapper.GetPlanFor<A>().ToANew<B>() causes a crash.Stacktrace:
at AgileObjects.AgileMapper.Members.QualifiedMember.Append(Member childMember)
at AgileObjects.AgileMapper.Members.Dictionaries.DictionaryEntrySourceMember..ctor(DictionaryEntrySourceMember parent, Member childMember)
at AgileObjects.AgileMapper.Members.Dictionaries.DictionaryEntrySourceMember.Append(Member childMember)
at AgileObjects.AgileMapper.Members.MemberExtensionMethods.GetElementMember[TMember](TMember enumerableMember)
at AgileObjects.AgileMapper.Members.Dictionaries.DictionaryEntrySourceMember.AgileObjects.AgileMapper.Members.IQualifiedMember.GetElementMember()
at AgileObjects.AgileMapper.ObjectPopulation.Enumerables.EnumerableMappingExpressionFactory.HasCompatibleSourceMember(IMemberMapperData mapperData)
at AgileObjects.AgileMapper.ObjectPopulation.Enumerables.EnumerableMappingExpressionFactory.TargetCannotBeMapped(IObjectMappingData mappingData, String& reason)
at AgileObjects.AgileMapper.ObjectPopulation.MappingExpressionFactoryBase.Create(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.DataSources.Factories.Mapping.MappingDataSourceFactoryBase.CreateFor(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.DataSources.Factories.Mapping.MappingDataSourceSetFactory.CreateFor(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMapperFactory.Create[TSource,TTarget](ObjectMappingData`2 mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMappingData`2.GetOrCreateMapper()
at AgileObjects.AgileMapper.ObjectPopulation.MappingFactory.GetInlineMappingBlock(IObjectMappingData mappingData, MappingValues mappingValues, CreateMappingDataCallFactory createMappingDataCallFactory)
at AgileObjects.AgileMapper.ObjectPopulation.MappingFactory.GetElementMapping(IObjectMappingData elementMappingData, Expression sourceElementValue, Expression targetElementValue)
at AgileObjects.AgileMapper.ObjectPopulation.MappingFactory.GetElementMapping(Expression sourceElementValue, Expression targetElementValue, IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.Enumerables.EnumerablePopulationBuilder.GetElementMapping(Expression sourceElement, Expression targetElement, IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.Enumerables.EnumerablePopulationBuilder.GetValueCheckedElementMapping(Expression sourceElement, BlockExpression existingElementValueCheck, IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.Enumerables.EnumerablePopulationBuilder.GetElementConversion(Expression sourceElement, IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.Enumerables.Looping.EnumerableSourcePopulationLoopData.GetElementMapping(IObjectMappingData enumerableMappingData)
at AgileObjects.AgileMapper.ObjectPopulation.Enumerables.Dictionaries.DictionaryPopulationBuilder.GetPopulation(IPopulationLoopData loopData, DictionaryTargetMember dictionaryEntryMember, IObjectMappingData dictionaryMappingData)
at AgileObjects.AgileMapper.ObjectPopulation.Enumerables.Dictionaries.DictionaryPopulationBuilder.AssignDictionaryEntry(IPopulationLoopData loopData, DictionaryTargetMember dictionaryEntryMember, IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.Enumerables.Dictionaries.DictionaryPopulationBuilder.AssignDictionaryEntryFromKeyValuePair(DictionaryToDictionaryPopulationLoopData loopData, IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.Enumerables.Looping.PopulationLoopDataExtensions.BuildPopulationLoop[TLoopData](TLoopData loopData, EnumerablePopulationBuilder builder, IObjectMappingData mappingData, Func`3 elementPopulationFactory)
at AgileObjects.AgileMapper.ObjectPopulation.Enumerables.Dictionaries.DictionaryPopulationBuilder.BuildDictionaryToDictionaryPopulationLoop(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.Enumerables.Dictionaries.DictionaryPopulationBuilder.AddItems(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.DictionaryMappingExpressionFactory.GetEnumerableToDictionaryMapping(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.DictionaryMappingExpressionFactory.GetDictionaryPopulation(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.DictionaryMappingExpressionFactory.AddObjectPopulation(MappingCreationContext context)
at AgileObjects.AgileMapper.ObjectPopulation.MappingExpressionFactoryBase.<>c__DisplayClass11_0.<AddPopulationsAndCallbacks>b__0(MappingExpressionFactoryBase factory, MappingCreationContext ctx)
at AgileObjects.AgileMapper.ObjectPopulation.MappingExpressionFactoryBase.AddPopulationsAndCallbacks[TArg](TArg argument, MappingCreationContext context, Action`2 mappingBodyPopulator)
at AgileObjects.AgileMapper.ObjectPopulation.MappingExpressionFactoryBase.AddPopulationsAndCallbacks(MappingCreationContext context)
at AgileObjects.AgileMapper.ObjectPopulation.MappingExpressionFactoryBase.Create(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.DataSources.Factories.Mapping.MappingDataSourceFactoryBase.CreateFor(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.DataSources.Factories.Mapping.MappingDataSourceSetFactory.CreateFor(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMapperFactory.Create[TSource,TTarget](ObjectMappingData`2 mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMappingData`2.GetOrCreateMapper()
at AgileObjects.AgileMapper.ObjectPopulation.MappingFactory.GetInlineMappingBlock(IObjectMappingData mappingData, MappingValues mappingValues, CreateMappingDataCallFactory createMappingDataCallFactory)
at AgileObjects.AgileMapper.ObjectPopulation.MappingFactory.GetChildMapping(IObjectMappingData childMappingData, MappingValues mappingValues, ObjectMapperData declaredTypeMapperData)
at AgileObjects.AgileMapper.ObjectPopulation.MappingFactory.GetChildMapping(IQualifiedMember sourceMember, Expression sourceMemberAccess, Int32 dataSourceIndex, IChildMemberMappingData childMappingData)
at AgileObjects.AgileMapper.DataSources.ComplexTypeDataSource.Create(IDataSource wrappedDataSource, Int32 dataSourceIndex, IChildMemberMappingData complexTypeMappingData)
at AgileObjects.AgileMapper.DataSources.Factories.DataSourceFindContext.GetFinalDataSource(IDataSource foundDataSource, IChildMemberMappingData mappingData)
at AgileObjects.AgileMapper.DataSources.Factories.DataSourceFindContext.GetSourceMemberDataSource()
at AgileObjects.AgileMapper.DataSources.Factories.DataSourceFindContext.get_MatchingSourceMemberDataSource()
at AgileObjects.AgileMapper.DataSources.Factories.DataSourceFindContext.UseSourceMemberDataSource()
at AgileObjects.AgileMapper.DataSources.Factories.SourceMemberDataSourcesFactory.Create(DataSourceFindContext context)+MoveNext()
at AgileObjects.AgileMapper.DataSources.Factories.MemberDataSourceSetFactory.EnumerateDataSources(DataSourceFindContext context)+MoveNext()
at System.Collections.Generic.LargeArrayBuilder`1.AddRange(IEnumerable`1 items)
at System.Collections.Generic.EnumerableHelpers.ToArray[T](IEnumerable`1 source)
at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
at AgileObjects.AgileMapper.DataSources.Factories.MemberDataSourceSetFactory.CreateFor(DataSourceFindContext findContext)
at AgileObjects.AgileMapper.Members.Population.MemberPopulatorFactory.Create(MemberPopulationContext context)
at AgileObjects.AgileMapper.Members.Population.MemberPopulatorFactory.<>c.<Create>b__3_0(MemberPopulationContext ctx, QualifiedMember tm)
at AgileObjects.AgileMapper.Extensions.PublicEnumerableExtensions.Project[TItem,TArg,TResult](IEnumerable`1 items, TArg argument, Func`3 projector)+MoveNext()
at AgileObjects.AgileMapper.Extensions.PublicEnumerableExtensions.Filter[TItem,TArg](IEnumerable`1 items, TArg argument, Func`3 predicate)+MoveNext()
at AgileObjects.AgileMapper.ObjectPopulation.ComplexTypes.PopulationExpressionFactoryBase.GetPopulationsAndCallbacks(IObjectMappingData mappingData)+MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at AgileObjects.AgileMapper.ObjectPopulation.ComplexTypes.PopulationExpressionFactoryBase.AddPopulation(MappingCreationContext context)
at AgileObjects.AgileMapper.ObjectPopulation.ComplexTypes.ComplexTypeMappingExpressionFactory.AddObjectPopulation(MappingCreationContext context)
at AgileObjects.AgileMapper.ObjectPopulation.MappingExpressionFactoryBase.<>c__DisplayClass11_0.<AddPopulationsAndCallbacks>b__0(MappingExpressionFactoryBase factory, MappingCreationContext ctx)
at AgileObjects.AgileMapper.ObjectPopulation.MappingExpressionFactoryBase.AddPopulationsAndCallbacks[TArg](TArg argument, MappingCreationContext context, Action`2 mappingBodyPopulator)
at AgileObjects.AgileMapper.ObjectPopulation.MappingExpressionFactoryBase.AddPopulationsAndCallbacks(MappingCreationContext context)
at AgileObjects.AgileMapper.ObjectPopulation.MappingExpressionFactoryBase.Create(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.DataSources.ComplexTypeDataSource.Create(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.DataSources.Factories.Mapping.ComplexTypeMappingDataSourceFactory.CreateFor(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.DataSources.Factories.Mapping.MappingDataSourceSetFactory.CreateFor(IObjectMappingData mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMapperFactory.Create[TSource,TTarget](ObjectMappingData`2 mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMappingData`2.GetOrCreateMapper()
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMapperFactory.<>c__6`2.<GetOrCreateRoot>b__6_0(IRootMapperKey key)
at AgileObjects.AgileMapper.Caching.ArrayCache`2.GetOrAdd(TKey key, Func`2 valueFactory)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMapperFactory.GetOrCreateRoot[TSource,TTarget](ObjectMappingData`2 mappingData)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMappingData`2..ctor(TSource source, TTarget target, Nullable`1 elementIndex, Object elementKey, MappingTypes mappingTypes, IMappingContext mappingContext, IObjectMappingData declaredTypeMappingData, IObjectMappingData parent, Boolean createMapper)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMappingData`2..ctor(TSource source, TTarget target, Nullable`1 elementIndex, Object elementKey, MappingTypes mappingTypes, IMappingContext mappingContext, IObjectMappingData parent, Boolean createMapper)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMappingDataFactory.ForRootFixedTypes[TSource,TTarget](TSource source, TTarget target, MappingTypes mappingTypes, IMappingContext mappingContext, Boolean createMapper)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMappingDataFactory.ForRootFixedTypes[TSource,TTarget](TSource source, TTarget target, IMappingContext mappingContext, Boolean createMapper)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMappingDataFactory.ForRootFixedTypes[TSource,TTarget](IMappingContext mappingContext, Boolean createMapper)
at AgileObjects.AgileMapper.ObjectPopulation.ObjectMappingDataFactory.ForRootFixedTypes[TSource,TTarget](IMappingContext mappingContext)
at AgileObjects.AgileMapper.Api.PlanTargetSelector`1.GetMappingPlan[TTarget](IMappingContext planContext, Func`2 mappingDataFactory, ICollection`1 configurations)
at AgileObjects.AgileMapper.Api.PlanTargetSelector`1.GetMappingPlan[TTarget](MappingRuleSet ruleSet, ICollection`1 configurations)
at AgileObjects.AgileMapper.Api.PlanTargetSelector`1.ToANew[TResult](Expression`1[] configurations)
at Dor.UExtractor.Web.Startup.Configure(IApplicationBuilder app) in H:\Sources\Work\UVault\DOR-Dev\trunk\UExtractor\UExtractor.Web\Startup.cs:line 161