Dictionary<string, arrayofclass> fails
Pegoth opened this issue · 4 comments
Pegoth commented
When trying to map a class that has a Dictionary<string, array of class>
property it crashes, even when only getting the plan.
Note: It doesn't matter what the class C
has.
Example code (https://dotnetfiddle.net/Widget/wXVQPI):
using System;
using System.Collections.Generic;
using AgileObjects.AgileMapper;
public class Program
{
public static void Main()
{
try
{
var a = Mapper.GetPlanFor<A>().ToANew<B>().ToString();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
Console.WriteLine(ex.StackTrace);
}
}
}
public class A
{
public Dictionary<string, C[]> TestDictionary { get; set; }
}
public class B
{
public Dictionary<string, C[]> TestDictionary { get; set; }
}
public class C
{
public string TestProperty { get; set; }
}
Message: Reference equality is not defined for the types 'C[]' and 'C'.
StackTrace:
at System.Linq.Expressions.Expression.ReferenceEqual(Expression left, Expression right)
at System.Linq.Expressions.BinaryExpression.Update(Expression left, LambdaExpression conversion, Expression right)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.<ReplaceIn>b__11_0(BinaryExpression b)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn[TExpression](TExpression expression, Func`2 replacer)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn(BinaryExpression binary)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn(Expression expression)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn[TExpression](TExpression expression, Func`2 replacer)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.Replace(Expression expression)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.<ReplaceIn>b__12_0(ConditionalExpression cnd)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn[TExpression](TExpression expression, Func`2 replacer)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn(ConditionalExpression conditional)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn(Expression expression)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn[TExpression](TExpression expression, Func`2 replacer)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.Replace(Expression expression)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn[TItem](IList`1 items, Func`2 replacer)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn(IList`1 expressions)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.<ReplaceIn>b__13_0(BlockExpression b)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn[TExpression](TExpression expression, Func`2 replacer)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn(BlockExpression block)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn(Expression expression)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn[TExpression](TExpression expression, Func`2 replacer)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.Replace(Expression expression)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.<ReplaceIn>b__34_0(TryExpression t)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn[TExpression](TExpression expression, Func`2 replacer)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn(TryExpression try)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.ReplaceIn(Expression expression)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.ExpressionReplacer.Replace[TExpression](Expression expression)
at AgileObjects.AgileMapper.Extensions.Internal.ExpressionExtensions.Replace[TExpression](TExpression expression, ISimpleDictionary`2 replacementsByTarget)
at AgileObjects.AgileMapper.ObjectPopulation.MappingFactory.GetDirectAccessMapping(Expression mapping, IMemberMapperData mapperData, MappingValues mappingValues, Expression createMappingDataCall)
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.<AddPopulationsAndCallbacks>b__11_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.<AddPopulationsAndCallbacks>b__11_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 Program.Main()
SteveWilkes commented
Darnit! I'll look into it, thanks again for letting me know.
Steve
Pegoth commented
Darnit! I'll look into it, thanks again for letting me know.
Steve
I feel your pain ^^
SteveWilkes commented
This is fixed in the latest 1.7.2 branch code - release to follow.
Thanks again for letting me know! :)
SteveWilkes commented
This is fixed in release 1.7.2, which is now on NuGet.
Thanks again!